Laravel Socialite 回调 auth('customer')->user() 为空
Laravel Socialite callback auth('customer')->user() is null
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');
}
那么debugbar的输出就是
log callback user: null
假设用户已登录,并尝试与 google 连接,但是当到达回调时,用户 session 消失了。我错过了什么?
P/S:默认auth驱动为admin
,无法更改。
经过一天的研究,我发现会话ID与导航到Google之前以及回调请求中的会话ID不同。
只需更新 config/session.php,并设置为 lax
(原来是 strict
)
[
// ...
'same_site' => 'lax',
]
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');
}
那么debugbar的输出就是
log callback user: null
假设用户已登录,并尝试与 google 连接,但是当到达回调时,用户 session 消失了。我错过了什么?
P/S:默认auth驱动为admin
,无法更改。
经过一天的研究,我发现会话ID与导航到Google之前以及回调请求中的会话ID不同。
只需更新 config/session.php,并设置为 lax
(原来是 strict
)
[
// ...
'same_site' => 'lax',
]