Laravel Socialite 回调 auth('customer')->user() 为 null

Posted

技术标签:

【中文标题】Laravel Socialite 回调 auth(\'customer\')->user() 为 null【英文标题】:Laravel Socialite callback auth('customer')->user() is nullLaravel Socialite 回调 auth('customer')->user() 为 null 【发布时间】:2020-04-16 14:14:56 【问题描述】:

Laravel 6

有两种可能的情况:

    已登录的用户连接到 Google 帐户 来宾用户连接到 Google 帐户(如果不存在,将创建一个新用户)

我们来说第一个场景

在我的 routes/web.php 中,没有中间件

Route::get('connect/provider', [ConnectController::class, 'connect'])
    ->name('connect');
Route::get('connect/provider/callback', [ConnectController::class, 'callback'])
    ->name('connect.callback');

ConnectController.php

class ConnectController extends Controller

    public function connect(Request $request, $provider)
    
        $scopes = config('services.google.scopes');

        // dump(auth('customer')->user()); <------- this 1 has value

        return Socialite::driver($provider)
            ->scopes($scopes)
            ->redirect();
    

    public function callback(Request $request, $provider)
    
        $oauthUser = Socialite::driver($provider)->stateless()->user();

        $user = auth('customer')->user();
        debugbar()->log('callback user: ' . ($user->name ?? 'null'));

        // ...

        if (!auth('customer')->check()) 
            debugbar()->log('user not logged in, log in now: ' . $u->name);
            auth('customer')->login($u);
        
        return redirect()->route('accounts');
    

那么调试栏输出就是

log callback user: null

假设用户已登录,并尝试与 google 连接,但当到达回调时,用户会话消失了。我错过了什么?

P/S:默认的认证驱动是admin,不能更改。

【问题讨论】:

【参考方案1】:

经过一天的研究,我发现会话 ID 与导航到 Google 之前和回调请求中的不同。

只需更新config/session.php,并设置为lax(原为strict

[
    // ...
    'same_site' => 'lax',
]

【讨论】:

以上是关于Laravel Socialite 回调 auth('customer')->user() 为 null的主要内容,如果未能解决你的问题,请参考以下文章

用户取消应用请求后,Laravel 5 Socialite Facebook 登录错误处理回调

找不到类“Laravel\Socialite\SocialiteServiceProvider”

无法将 Laravel / Socialite 与 Lumen 一起使用

带有 Laravel 后端和 React Native 应用程序的 Facebook 和 JWT Auth

使用 Laravel Socialite 登录 Facebook

Laravel Socialite 与 Facebook 未登录