2016-06-01 3 views
3

Facebook 계정을 사용하여 내 사용자에게 로그인하는 Socialite의 Laravel 5 웹 앱이 있습니다. 내가 지금 문제가Laravel 5 Socialite Facebook 로그인 사용자가 앱 요청을 취소 한 후 콜백에서 오류 처리

class SocialAccountService 
{ 
    public function createOrGetUser(ProviderUser $providerUser) 
    { 
     $account = SocialAccount::whereProvider('facebook') 
      ->whereProviderUserId($providerUser->getId()) 
      ->first(); 

     if ($account) { 
      return $account->user; 
     } else { 

      $account = new SocialAccount([ 
       'provider_user_id' => $providerUser->getId(), 
       'provider' => 'facebook' 
      ]); 

      $user = User::whereEmail($providerUser->getEmail())->first(); 

      if (!$user) { 

       $user = User::create([ 
        'email' => $providerUser->getEmail(), 
        'name' => $providerUser->getName(), 
       ]); 
      } 

      $account->user()->associate($user); 
      $account->save(); 

      return $user; 

     } 

    } 
} 

: 이것은 새로운 존재하는 경우 내 SocialAccountService는, 기본적으로 기능은 사용자를 반환하거나 생성

public function callback(SocialAccountService $service) 
{ 

    $user = $service->createOrGetUser(Socialite::driver('facebook')->user()); 

    auth()->login($user); 

    return redirect()->to('/home'); 
} 

:

이 내 콜백 함수입니다 내 사용자가 Facebook을 통해 성공적으로 로그인 할 수 있지만 FB 대화 상자에서 Cancel (취소)을 클릭하여 권한을 부여하면 중단됩니다.

어떻게이 오류를 처리 할 수 ​​ Callback Error on Facebook app permission denial ? URL 상자에 오류 메시지가 표시되지만 처리 할 수는 없습니다. 난 당신이 '코드'입력 필드의 presense를 확인 할 수 있으며이 리디렉션되지 않은 경우 오류 페이지를 로그인 백업 할 callback(...) 방법 Laravel와 사교계

+0

당신이 쓰는 않았다 라우팅? –

+0

'Route :: get ('/ callback', 'SocialAuthController @ callback');'내가 작성한 경로입니다. 사용자도 제대로 로그인 할 수 있지만 새 사용자가 권한 대화 상자를 취소하면 오류가 발생합니다. 내가 처리 할 수 ​​없습니다 – krozaine

+0

당신이 방법을 얻을 라우팅을 작성하지만 여기에 게시 방법을 참조하십시오 요청 –

답변

3

상당히 새로운 오전

P.S.

예 : 제대로

function callback(SocialAccountService $service ,Request $request) { 
    if (! $request->input('code')) { 
     return redirect('login')->withErrors('Login failed: '.$request->input('error').' - '.$request->input('error_reason')); 
    } 

    // rest of your code 
}