laravel - 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
。奇怪的是,我能够注册一次用户,但由于同样的问题,我再也没有注册过。
解决方案
目前很难说,但希望这会有所帮助:
你的 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
推荐阅读
- php - PHP没有为测验调用数组
- sql - 状态栏中的 SPID 与 @@SPID 不同
- android - React-Native android 设备看不到控制台远程调试
- android-studio - 当它是来自 admob 的我的 adUnitId 时,缺少必需的 XML 属性“adSize”
- typescript - IntelliSense:为什么我不能查找 DOM/CSS 类型?
- printing - gdb 如何知道打印的指令是处于 arm 模式还是 thumb 模式?
- javascript - 使用 onChange 事件并发送两个对象作为参数让我不确定
- javascript - HighCharts 自定义 SVG 标记符号
- html - 网站不适合视口
- c++ - Visual Studio 2017 寻找 DLL 而不是 LIB