首页 > 解决方案 > 在标头中发送令牌时,Laravel TokenMismatch Exception

问题描述

我在发出 ajax 请求时在标头中发送CSRF令牌。

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': getCookie("XSRF-TOKEN")
    }
});

在上面的代码中,我从“ XSRF-TOKEN”cookie 中获取令牌,并在“ X-CSRF_TOKEN”标头中为所有 ajax 请求全局设置。

我已经在 chrome 开发人员工具中检查了这个标头正在被发送。

但是Laravel仍然会抛出TokenMismatch异常。

请注意,我无法从 html 之类的元标记或输入字段中获取令牌,因为正在缓存 html 内容,因此我想设置使用 laravel 在每个响应中设置的“XSRF-TOKEN”cookie。

标签: phplaravelcookieslaravel-5.3csrf-protection

解决方案


Laravel 生成的 tokencsrf_token()和 cookie 中设置的 token 不一样。

现在的问题是“X-CSRF-TOKEN”标头用于发送csrf_token()函数生成的令牌。

因此,如果您想发送从 cookie 获得的 csrf 令牌,您应该使用“X-XSRF-TOKEN”标头。

因此上面的代码应该像

$.ajaxSetup({
    headers: {
        'X-XSRF-TOKEN': getCookie("XSRF-TOKEN")
    }
});

推荐阅读