2017-01-07 10 views
3

私はFacebookの機能とログインを統合するためにsocialiteを使用しています。Laravel 5.3は新しいFacebookユーザーを2回目から記録します

public function handleProviderCallback() 
{ 

    try { 
     $socialUser = Socialite::driver('facebook')->user(); 
    } catch (\Exception $e) { 
     return redirect('/dashboard'); 
    } 


    /*section1 : i check if the user exists in the db, and if no then 
    I save this user in the db */ 

    $user = User::where('facebook_id', $socialUser->getId())->first(); 
    if (!$user) { 
     User::create([ 
      'facebook_id' => $socialUser->getId(), 
      'name' => $socialUser->getName(), 
      'email' => $socialUser->getEmail(), 
     ]); 

     Auth::loginUsingId($socialUser->id); 
     return redirect()->intended('/dashboard'); 
     } 

     /* end of section one */ 


     else{ 
     if(Auth::loginUsingId($user->id)){ 
      return redirect()->intended('/dashboard'); 
     } 
    } 


} 

問題がある:ここに私のコードです。私は、新しいユーザーでログイン、データがデータベースに追加され、私はダッシュボードにリダイレクトしていますが、私はログインしていないです、私がログインしようとした後、もう一度(ユーザーがデータベースに既に存在する場合)、私は正常にログインしました。なぜですか?ありがとう!

答えて

0

問題は次のとおりです。あなたはデータベース内のユーザーIDを渡す必要がありますが、FacebookのIDは渡しません。

Auth::loginUsingId($socialUser->id);

更新

$newUser = User::create(...); 
Auth::loginUsingId($newUser->id); 
+0

を以下のように私はHandleExceptions-> handleErrorの( '8'、 '非オブジェクトのプロパティを取得しようとすると'、「/ユーザ/アンドレイ/時エラー を得ましたRegisterController.php行の 'desktop/service/service.dev/app/Http/Controllers/Auth/RegisterController.php'、 '104'、array( 'socialUser' =>オブジェクト(User)、 'user' => null) (Auth :: loginUsingId($ user-> id);) –

+0

@AndrewT 'create'関数は、作成されたインスタンスを返します。このエラーから、エントリが作成されなかったようです。 'create user'関数の戻り値を' $ user = User :: create(...) 'として保存したいと考えています。 DBにエントリが登録されているかどうか確認できますか? –

+0

データが正常にDBに追加されます。問題は、上記のコードを変更した後にエラーが発生したり、ダッシュボードにリダイレクトされたのにログインしていなかったためにそのユーザーとすぐにログインできないこと、理由を理解できないことです。私は$ユーザが私がif文の外に出た後にしか作成されないと仮定しているので、if文の中で$ユーザを使うことはできません –

関連する問題