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对话框上的取消获取权限时,它会中断.
我该如何处理这个错误?我可以在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)
| 归档时间: |
|
| 查看次数: |
3887 次 |
| 最近记录: |