laravel 5.3使用facebook登录

时间:2017-01-05 13:39:52

标签: php laravel laravel-5.3

我正在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');

1 个答案:

答案 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');
}

这样,如果有用户,他们仍然会登录,而不是处理程序什么都不做