繁体   English   中英

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

[英]Laravel 5 Socialite Facebook Login Error handling on callback after user cancels app request

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

这是我的回调函数:

public function callback(SocialAccountService $service)
{

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

    auth()->login($user);

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

这是我的 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;

        }

    }
}

现在的问题是,我能够让我的用户通过 Facebook 成功登录,但是当用户在 FB 对话框上单击取消以获得许可时,它会中断。

Facebook 应用程序权限拒绝的回调错误

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

PS 我对 Laravel 和 Socialite 还很陌生

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
}    

Try catch 是最佳实践(它捕获所有异常)

 try
{
    $userSocial =Socialite::driver('facebook')
    ->stateless()->user();
    dd($userSocial);
 }
catch (\Throwable $e) { 

//handle error here for php 7 or 8  

  } catch (\Exception $e) { 
  // for php 5
  handle error here 

  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM