如何在 Laravel 中调试 419 页面过期以进行 Google 回调?

问题描述 投票:0回答:1

我最近更新到了最新的 laravel,在进行此操作和其他开发时,不知何故破坏了我的 Google SSO 集成。

我没有使用 Socialite,但它有类似的功能。在我的 web.php 路线上,我有:

Route::post('/auth/google/callback', [LoginController::class, 'handleGoogleCallback']);

这不在身份验证中间件内。

这会将我发送到我的 LoginController,其中我有:

public function handleGoogleCallback(Request $request) {

    // Get $id_token via HTTPS POST.
    $validatedRequest = $request->validate([
        'credential' => ['required', 'string', 'max:3000', 'min:100'],
    ]);
...

这个控制器上的构造是典型的,如果我注释掉中间件,我仍然有问题:

public function __construct()
{
    $this->middleware('guest')->except('logout');
}

不幸的是,当 Google 现在在成功认证后将用户转发回此端点时,它不会到达handleGoogleCallback 函数。它只是错误地显示 419 |页面过期错误。

我的其他页面都没有此错误,典型的登录工作正常。我已经验证了典型的 419 问题,例如设置 SESSON_SECURE_COOKIE=false,但我可以登录的事实通常意味着我搞砸了该端点的特定内容。我还向 Google Cloud 控制台添加了正确的可访问端点,但如果我不这样做,它可能根本不会返回到我的网站。

所以我现在很茫然。关于问题可能出在哪里,或者我如何进行故障排除有什么想法吗?谢谢。

laravel google-sso
1个回答
1
投票

分配给

VerifyCsrfToken
中间件组的
web
中间件将在 CSRF 令牌匹配失败时返回 419 响应(在本例中根本没有 CSRF 令牌)。

您可以为此 POST 路由的路径添加豁免,以便中间件不会尝试检查 CSRF 令牌:

protected $except = [
    'auth/google/callback',
];

Laravel 10.x 文档 - CSRF 保护 - 排除 URI

© www.soinside.com 2019 - 2024. All rights reserved.