2016-07-09 11 views
1

私はドキュメントに正確に従っています。Laravel SocialiteはFacebookにログインしていません

https://github.com/laravel/socialitehttps://laravel.com/docs/5.1/authentication#social-authentication

私はFacebook上で私のアプリを作成し、作業のすべてを持っています。 Facebookボタンを使ってログインすると、アプリを認証して自分のサイトに戻ってきます。 しかし、私はログインしていません。下のリダイレクトの代わりにdd()を実行すると、Facebookのアカウントからすべてのデータが取得されます。しかし、ログインしたユーザーにしか見えないページは表示されません。

Route::get('login/facebook', 'Auth\[email protected]'); 
Route::get('login/facebook/callback', 'Auth\[email protected]'); 

名士がcomposer.jsonに正しくインストールされています。ここでは

public function redirectToProvider() 
{ 
    return Socialite::driver('facebook')->redirect(); 
} 

public function handleProviderCallback() 
{ 
    $user = Socialite::driver('facebook')->user(); 

    return redirect('my-profile') 
      ->with('message', 'You have signed in with Facebook.'); 
} 

は私のルートです:

は、ここに私のコントローラです。クラスはconfig/app.phpにあり、FBアプリケーションのIDはconfig/services.phpにあります。

なぜ機能していないのでしょうか?

答えて

2

handleProviderCallbackメソッドでは、ドライバによって返されたユーザーを作成し、認証する必要があります。

$userModel = User::firstOrNew(['email' => $user->getEmail()]); 
if (!$userModel->id) { 
    $userModel->fill([.....]); 
    $userModel->save(); 
} 

が続いてユーザーを認証:存在しない場合は

ユーザーを作成します

Auth::login($userModel); 

あなたの方法は次のようになります。

public function handleProviderCallback() { 
    $user = Socialite::driver('facebook')->user(); 

    $userModel = User::firstOrNew(['email' => $user->getEmail()]); 
    if (!$userModel->id) { 
     $userModel->fill([.....]);//Fill the user model with your data 
     $userModel->save(); 
    } 

    Auth::login($userModel); 

    return redirect('my-profile') 
      ->with('message', 'You have signed in with Facebook.'); 
} 
関連する問題