Laravel5 跨 AJAX 请求重新生成 CSRF Token。不能 AJAX
Posted
技术标签:
【中文标题】Laravel5 跨 AJAX 请求重新生成 CSRF Token。不能 AJAX【英文标题】:Laravel5 regenerates CSRF Token across AJAX requests. Can't AJAX 【发布时间】:2015-06-20 15:52:56 【问题描述】:我正在开发一个使用 Laravel5 构建的 API 和一个使用 Angular JS 的 客户端。两者完全分离和独立。
为了将 AJAX 插入 API,我的 客户端 成功请求在给定端点 (/token
) 使用 Laravel 的 csrf_token()
生成的令牌,然后将其存储在其 $rootScope
中稍后在每个 POST 或 PUT 请求中用作 _token 字段。
但是在发送 AJAX PUT 或 POST 请求时,我收到 TokenMismatchException 错误。
我正在打印输出中匹配的令牌,并且在每次 AJAX 请求时它都不同,但通过浏览器加载 /token
(常规 HTTP 请求)每次都输出相同的令牌。
有什么想法吗?
我不知道这是设计使然,我的应用程序逻辑有缺陷,还是有其他问题。
【问题讨论】:
【参考方案1】:您需要将令牌添加到您的标头并将其包含在您的 ajax 调用中。使用
<meta name="csrf-token" content=" csrf_token() " />
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
);
在文档中
http://laravel.com/docs/5.0/routing#csrf-protection
【讨论】:
headers 和 post 方法都应该起作用,但它们都不起作用。我都试过了。令牌正在传递给 API,只是不匹配。以上是关于Laravel5 跨 AJAX 请求重新生成 CSRF Token。不能 AJAX的主要内容,如果未能解决你的问题,请参考以下文章