用户取消应用请求后,Laravel 5 Socialite Facebook 登录错误处理回调
Posted
技术标签:
【中文标题】用户取消应用请求后,Laravel 5 Socialite Facebook 登录错误处理回调【英文标题】:Laravel 5 Socialite Facebook Login Error handling on callback after user cancels app request 【发布时间】:2016-09-30 17:20:31 【问题描述】:我有一个带有 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 对话框上单击取消以获得权限时,它会中断。
我该如何处理这个错误?我可以在 URL 框中看到错误消息,但不知道如何处理它们。
P.S 我对 Laravel 和 Socialite 还很陌生
【问题讨论】:
路由写对了吗?Route::get('/callback', 'SocialAuthController@callback');
这是我写的路由,用户也可以正常登录,但是如果新用户取消权限对话框,就会出现我无法处理的错误
您为 get 方法编写路由,但我在这里看到请求带有 post 方法
github.com/laravel/socialite 详情见这里
【参考方案1】:
在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
【讨论】:
我认为输入error_reason
已被 error_description
替换。【参考方案2】:
尝试 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
【讨论】:
以上是关于用户取消应用请求后,Laravel 5 Socialite Facebook 登录错误处理回调的主要内容,如果未能解决你的问题,请参考以下文章
[ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件