我正在laravel 5.3项目中使用facebook实现登录。它似乎工作,因为我从Facebook用户获取记录到数据库的所有数据,但我的项目看到我的身份验证状态未记录。此外,它不会将我重定向到仪表板,但会显示带有回调链接的白页。为什么呢?
它将用户重定向到fagebook页面以登录
public function redirectToProvider()
{
return Socialite::driver('facebook')->redirect();
}
回调处理程序
public function handleProviderCallback()
{
try{
$socialUser = Socialite::driver('facebook')->user();
}
catch(\Exception $e) {
return redirect('/dashboard');
}
$user = User::where('facebook_id', $socialUser->getId())->first();
if(!$user){
User::create([
'facebook_id' => $socialUser->getId(),
'name' => $socialUser->getName(),
'email' => $socialUser->getEmail(),
]);
auth()->login($user);
return redirect()->to('/dashboard');
}
}
我的身份验证() - >登录似乎不起作用,并且还重定向。可能是什么问题?谢谢!
路线:
Route::get('dashboard', ['as' => 'dashboard', 'uses' => 'PageController@getDashboard']);
Route::get('auth/facebook', 'Auth\RegisterController@redirectToProvider');
Route::get('auth/facebook/callback', 'Auth\RegisterController@handleProviderCallback');
答案 0 :(得分:2)
对于编码回调处理程序的方式,行为似乎是正确的。我相信你想要发生的是如果用户存在然后你想要登录它们,你当前的代码如果用户存在就没有任何东西,所以你需要确保用户是否存在他们已经登录。 / p>
我会按如下方式更改代码:
$user = User::where('facebook_id', $socialUser->getId())->first();
if(!$user){
User::create([
'facebook_id' => $socialUser->getId(),
'name' => $socialUser->getName(),
'email' => $socialUser->getEmail(),
]);
}
if(Auth::loginUsingId($user->id)){
return redirect()->intended('/dashboard');
}
这样,如果有用户,他们仍然会登录,而不是处理程序什么都不做