首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5社交名流Facebook在用户取消应用请求后回调时的登录错误处理

Laravel 5社交名流Facebook在用户取消应用请求后回调时的登录错误处理
EN

Stack Overflow用户
提问于 2016-06-01 19:10:49
回答 2查看 5.8K关注 0票数 8

我有一个带有社交名流的Laravel 5 web应用程序,可以使用Facebook帐户登录我的用户。

这是我的回调函数:

代码语言:javascript
复制
public function callback(SocialAccountService $service)
{

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

    auth()->login($user);

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

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

代码语言:javascript
复制
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对话框上的Cancel以获取权限时,它就会中断。

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

附言:我对Laravel和社会名流还是个新手

EN

回答 2

Stack Overflow用户

发布于 2016-07-07 19:20:01

callback(...)方法中,您可以检查“代码”输入字段是否存在,如果没有,则重定向到出现错误的登录页面。

示例:

代码语言:javascript
复制
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
}    
票数 9
EN

Stack Overflow用户

发布于 2021-03-06 00:39:39

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

代码语言:javascript
复制
 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 

  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37566985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档