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 中稍后在每个 POSTPUT 请求中用作 _token 字段。

但是在发送 AJAX PUTPOST 请求时,我收到 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

【讨论】:

headerspost 方法都应该起作用,但它们都不起作用。我都试过了。令牌正在传递给 API,只是不匹配。

以上是关于Laravel5 跨 AJAX 请求重新生成 CSRF Token。不能 AJAX的主要内容,如果未能解决你的问题,请参考以下文章

如何配置WAMP Apache服务器允许的Ajax跨域请求

如何在 Ajax 请求后重新生成 jQuery Mobile 样式?

使用CORS解决跨域问题

laravel5.4中自定义ajax请求响应类

Laravel 5 异步 AJAX 请求导致会话问题

如何发送跨域ajax请求[重复]