Laravel Socialite 与 Facebook 未登录

Posted

技术标签:

【中文标题】Laravel Socialite 与 Facebook 未登录【英文标题】:Laravel Socialite with Facebook not logging in 【发布时间】:2016-11-12 05:40:30 【问题描述】:

我完全按照文档进行操作。

https://github.com/laravel/socialite 和 https://laravel.com/docs/5.1/authentication#social-authentication

我已经在 Facebook 上创建了我的应用程序并且一切正常。当我单击我的使用 Facebook 登录按钮时,它会授权该应用程序并将我带回我的站点。 但是,它没有显示我已登录。如果我使用 dd() 而不是下面的重定向,我会从我的 Facebook 帐户中获取所有数据。但是只有登录用户才能看到的页面是不可见的。

这是我的控制器:

public function redirectToProvider()

    return Socialite::driver('facebook')->redirect();


public function handleProviderCallback()

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

    return redirect('my-profile')
            ->with('message', 'You have signed in with Facebook.');

这是我的路线:

Route::get('login/facebook', 'Auth\AuthController@redirectToProvider');
Route::get('login/facebook/callback', 'Auth\AuthController@handleProviderCallback');

Socialite 已正确安装在 composer.json 中。这些类在 config/app.php 中,我的 FB 应用程序的 ID 在 config/services.php 中。

关于它为什么不起作用的任何想法?

【问题讨论】:

【参考方案1】:

handleProviderCallback 方法中,您需要创建并验证驱动程序返回的用户。

如果不存在则创建用户:

$userModel = User::firstOrNew(['email' => $user->getEmail()]);
if (!$userModel->id) 
    $userModel->fill([.....]);
    $userModel->save();

然后验证用户:

Auth::login($userModel);

您的方法将如下所示:

public function handleProviderCallback() 
    $user = Socialite::driver('facebook')->user();

    $userModel = User::firstOrNew(['email' => $user->getEmail()]);
    if (!$userModel->id) 
        $userModel->fill([.....]);//Fill the user model with your data
        $userModel->save();
    

    Auth::login($userModel);

    return redirect('my-profile')
            ->with('message', 'You have signed in with Facebook.');

【讨论】:

以上是关于Laravel Socialite 与 Facebook 未登录的主要内容,如果未能解决你的问题,请参考以下文章

将 Laravel Socialite 与 API 一起使用?

JWT + Laravel Socialite 与 OAuth 参数

找不到类“Laravel\Socialite\SocialiteServiceProvider”

使用 Laravel Socialite 登录 Facebook

Laravel 7 Socialite Google 登录显示无效的授权错误

Laravel 5.2 Socialite 检索空电子邮件