【发布时间】:2017-07-22 18:47:54
【问题描述】:
我将 Laravel 用于需要 CSRF 令牌 进行 API 调用的项目。 我的 CSRF 元标记 sometimes 包含过期的令牌。通过刷新,最好进行 10 个新呼叫。因此,在大约 10 次刷新之后,我从 AJAX 调用中获得了 TokenMismatchException。将此 API 调用设为 CSRF 异常不是一种选择,因为该 API 调用负载很重且包含有价值的信息。
我没有自定义任何中间件类。
我在 javascript 中的 AJAX 调用如下所示:
$.ajax({
url: '/getAllProducts',
type: 'POST',
data: {
type: "gpu",
hash: md5hash,
_token: $('meta[name="csrf-token"]').attr('content')
},
dataType: 'json',
success: function (response) {
md5hash = '';
products = response;
$('.more-information').fadeIn();
$.getScript("/js/filter-products.js", function(){
filterProducts();
});
$.getScript("/js/createPopup.js", function(){
$('.more-information').on('click', createPopup);
$('.open-details').on('click', createPopup);
});
}
});
我的路线是这样的
route::post('/getAllProducts', 'PartsController@getAllProducts');
元 csrf 令牌像标准 Laravel app.blade.php 一样生成
<meta name="csrf-token" content="{{ csrf_token() }}">
我知道还有其他关于此问题的问题,但我没有找到解决方案。我尝试了其中的几个。
这是我尝试过的解决方案列表:
- 添加 jquery Ajaxsetup
- 更新 laravel
- 清除缓存
真的希望有人可以帮助我
【问题讨论】:
-
旁注:如果您的
<script>位于.blade.php文件中,则始终可以使用var _token = "{{ csrf_token() }}";,尽管最好尽可能将JS 和PHP 分开。至于为什么你会得到旧令牌;不能说。
标签: javascript ajax laravel routing csrf