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

时间:2019-12-26 09:54:14

标签: laravel authentication session oauth-2.0 laravel-socialite

Laravel 6

有两种可能的情况:

  1. 已登录的用户连接到Google帐户
  2. 来宾用户连接到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 个答案:

答案 0 :(得分:0)

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

只需更新 config / session.php ,并将其设置为lax (最初是strict

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