首页 > 解决方案 > cookie 和 html 中的 CSRF 令牌不匹配

问题描述

如何“正确”检索 CSRF 令牌?

我正在尝试使用 Axios 登录我的 Vue SPA。

我将所有内容都更改为 Vue 组件,Auth::routes();除了php artisan ui:auth. 因此,我不能再@csrf在我的表单上使用,必须通过 axios 的标头发送 csrf 令牌。我已经尝试了几乎所有的 2 天,直到我注意到 Laravel 给我的 cookie 的 XSRF TOKEN 与我在 HTML 中得到的不同......请参阅下面的照片。

这来自开发人员工具。

在此处输入图像描述 在此处输入图像描述

app.blade.php

我添加了这个,以便我可以设置检索 CSRF 令牌并将其附加到 axios 标头。

在此处输入图像描述

在 console.log() 上,我看到了一个不同的令牌。 在此处输入图像描述

我在 console.log() 时得到的令牌:o3nQRW6IqiKdNGOdiHc59pYXXD3sBw8YfbpCPvf7

在此处输入图像描述

为什么不直接从 cookie 中获取 CSRF 令牌然后使用document.cookie?,同样的事情。每当我使用 console.log() 时它都不匹配。

这绝对是无论我做什么,我总是收到 419 错误 CSRF 令牌不匹配的原因。这可能是什么原因造成的?

注意:我只Auth::routes()api.php文件中使用。什么都没有web.php。奇怪的是,我能够注册一次用户,但由于同样的问题,我再也没有注册过。

标签: laravelvue.jsaxioscsrf-token

解决方案


目前很难说,但希望这会有所帮助:


你的 SPA 在你的 Laravel 应用程序之外吗?然后我建议使用新的 Laravel Airlock 包来为你处理 CSRF 令牌。更多信息可以在这里找到:https ://laravel.com/docs/7.x/airlock

Laravel Airlock 更名为 Sanctum:https ://blog.laravel.com/airlock-renamed-to-sanctum

如果您的 SPA 在您的 Laravel 应用程序中,请查看您的 axios 配置,如果它在标头中使用 X-CSRF-Token。更多信息可以在这里找到:https ://laravel.com/docs/6.x/csrf#csrf-x-csrf-token


推荐阅读