Facebook PHP SDKを使用してユーザーをログしています。laravelのFacebookログインはリダイレクト後にセッションを保持できません
私はここでは、この
のログインと呼ばれるガードを作成したが、FacebookのAPIにアクセスするauth.phpの私のconfigファイル
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admin'=>[
'driver'=>'session',
'provider'=>'adminusers',
],
'verify'=>[
'driver'=>'session',
'provider'=>'verify',
],
'login'=>[
'driver'=>'session',
'provider'=>'users'
]
],
である私は、App \サービス名前空間内のクラスを作成したFacebookのそれを呼ばれます
のApp \ Servicesの\ Facbook.php
<?php
namespace App\Services;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Config;
use App\Extensions\Facebook\FacebookLaravelPersistentDataHandler;
use Facebook\Facebook as FB;
use App;
class Facebook{
protected $fb;
protected $helper;
protected $permission;
protected $log;
protected $canvashelper;
protected $persistentDataHandler;
function __construct()
{
$this->fb = new FB([
'app_id'=>Config::get('facebook.app_id'),
'app_secret'=>Config::get('facebook.app_secret'),
'default_graph_version' => Config::get('facebook.default_graph_version'),
'persistent_data_handler' => new FacebookLaravelPersistentDataHandler(),
]);
$this->helper = $this->fb->getRedirectLoginHelper();
$this->permission = Config::get('facebook.permission');
$this->log = new Logging(Config::get('facebook.logfile'),'Facebook Log');
$this->canvashelper = $this->fb->getCanvasHelper();
$this->persistentDataHandler = new FacebookLaravelPersistentDataHandler();
}
public function FBAuthUrl()
{
if($this->isFBAuth())
{
return $this->helper->getLogoutUrl($this->persistentDataHandler->get('facebook_access_token'),route('facebook.logout'));
}
else
{
return $this->helper->getLoginUrl(route('facebook.callback'),$this->permission);
}
}
public function LoginCallback()
{
$accessToken = $this->helper->getAccessToken();
if(isset($accessToken))
{
$this->persistentDataHandler->set('facebook_access_token',(string) $accessToken);
}
}
public function isFBAuth()
{
return $this->persistentDataHandler->has('facebook_access_token');
}
public function getFBUser()
{
if($this->isFBAuth())
{
$this->fb->setDefaultAccessToken($this->persistentDataHandler->get('facebook_access_token'));
/*,user_birthday,user_tagged_places*/
$response = $this->fb->get("/me?fields=id,name,first_name,last_name,age_range,link,gender,locale,picture,timezone,updated_time,verified,email");
return $response->getGraphUser();
}
else
{
return false;
}
}
public function logout()
{
$this->persistentDataHandler->delete('facebook_access_token');
$this->persistentDataHandler->delete('state');
}
}
そして、ここでは、私は私がそれに成功login_login_randomstring=>UserId
私のセッションを表示するセッションをダンプAuth::guard()->login()
を呼び出した後UserControllerで@ fbLogin を呼び出しています成功したFacebookのログインリダイレクトで私のログインロジック
class UserController extends Controller
{
.....
/*
* Facebook login callback function
* @param Object App\services\Facebook
* return redirect
*/
public function fbLogin(Facebook $facebook)
{
$facebook->LoginCallback();
/*
* get the usergraphnode from facebook
*/
$fbUser = $facebook->getFBUser();
/*
* Convert UserGraphNode User To Eloquent User
*/
$user = $this->getFBLoggedUser($fbUser);
/*
* Here Log the user in laravel System
*/
Auth::guard('login')->login($user);
//dump(Auth::guard($this->guard)->user());
dump(session()->all());
return reidrect('/');
}
public function getFBLoggedUser($fbUser)
{
if(User::where('email','=',$fbUser->getField('email'))->count())
{
$user = User::where('email','=',$fbUser->getField('email'))->first();
if($user->fb_app_id){
$user->fb_app_id = $fbUser->getField('id');
$user->save();
}
}
else
{
$user = $this->FBregister($fbUser);
}
return $user;
}
/**
* Register The user logged in from Facebook
*
* @param \Facebook\GraphNodes\GraphUser;
*
* return \App\Models\User
*/
public function FBregister($fbUser)
{
$user = new User();
$user->fname = $fbUser->getField('first_name');
$user->lname = $fbUser->getField('last_name');
$user->gender = $fbUser->getField('gender');
$user->email = $fbUser->getField('email');
$user->fb_app_id = $fbUser->getField('id');
$picture = $fbUser->getField('picture');
if($picture->isSilhouette()){
$user->profile_image = $picture->getUrl();
}
$user->save();
return $user;
}
.........
}
を書く私のUserControllerです。しかし、リダイレクトすると、すべてのセッションデータが失われます。
しかし、奇妙なことは、それがフェイスブックリダイレクトを呼び出すときにのみ起こることです。私は通常のログインルートのように、この機能を使用する場合、それは私が簡単にアクセスできるこの方法を使用するroute.php
Route::get('/login','[email protected]');
とUserControllerでで
function login(){
$user = User::find(12);
Auth::guard('login')->login($user);
return redirect('/');
}
でこの
ようperfactaly作品ここからリダイレクトした後のセッションデータですが、それは起こっていません。
私は誰もが私に
を助けることができますしてください2日間ここで立ち往生[注:私は、Webミドルウェアで私のルートをグループ化する必要があることあなたの答えには言及しないでください。 ]
あなたは完全な質問を読んでいないと思います。セッションのデータが失われ、正常に認証された後、ユーザーを別のページにリダイレクトしたとします。認証されたユーザーを取得することはまったく問題ではありません。 –
ストレージフォルダにファイルを保存する方法を確認してください。 http://stackoverflow.com/questions/31615462/session-not-saving-in-laravel-5-1 –