Laravel 5 Socialite Facebook登录用户取消应用程序请求后回调错误处理

kro*_*ine 7 php facebook laravel laravel-socialite laravel-5.2

我有一个带有Socialite的Laravel 5网络应用程序,可以通过Facebook帐户登录我的用户.

这是我的回调函数:

public function callback(SocialAccountService $service)
{

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

    auth()->login($user);

    return redirect()->to('/home');
}
Run Code Online (Sandbox Code Playgroud)

这是我的SocialAccountService,基本上该函数返回用户,如果存在或创建一个新用户:

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;

        }

    }
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,我能够通过Facebook成功登录我的用户,但当用户点击FB对话框上的取消获取权限时,它会中断.

Facebook应用权限拒绝时的回拨错误

我该如何处理这个错误?我可以在URL框中看到错误消息,但不知道处理它们.

PS我对Laravel和Socialite来说相当新

小智 9

在该callback(...)方法中,您可以检查"代码"输入字段的存量,如果没有,则重定向返回到有错误的登录页面.

例:

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
}    
Run Code Online (Sandbox Code Playgroud)