【发布时间】:2018-01-21 22:15:27
【问题描述】:
我创建了一个包含很多字段的表单,用户可以在其中创建无限的字段。 如果用户在它上面花费更多时间,CSRF 令牌就会过期,并且当他点击提交时,LARAVEL 会返回错误 CSRF 令牌不匹配。 那么如何通过使用 ajax 调用获取新的 CSRF 令牌,以便定期更新 CSRF? 我无法刷新或重新加载表单。
【问题讨论】:
我创建了一个包含很多字段的表单,用户可以在其中创建无限的字段。 如果用户在它上面花费更多时间,CSRF 令牌就会过期,并且当他点击提交时,LARAVEL 会返回错误 CSRF 令牌不匹配。 那么如何通过使用 ajax 调用获取新的 CSRF 令牌,以便定期更新 CSRF? 我无法刷新或重新加载表单。
【问题讨论】:
通过使用此代码,您可以在登录后使用regenerate() 方法获取新令牌,并在响应中返回一个新的csrf_token()。
你在函数中的控制器:
public function refreshToken(Request $request)
{
session()->regenerate();
return response()->json([
"token"=>csrf_token()],
200);
}
JavaScript:
$.ajax({
url: "{{url('refresh-token')}}",
type: 'get',
dataType: 'json',
success: function (result) {
$('meta[name="csrf-token"]').attr('content', result.token);
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': result.token
}
});
},
error: function (xhr, status, error) {
console.log(xhr);
}
});
【讨论】:
只需将其添加到您的脚本中
<script type="text/javascript">
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
}
});
</script>
并确保您已将令牌添加到您的元标记中,如下所示。
<meta name="_token" content="{!! csrf_token() !!}" />
我希望这对你有用。
链接https://laravel.com/docs/5.4/csrf#csrf-x-csrf-token
如果您仍然发现同样的问题,请查看这些内容
并确保您查看所有答案,而不仅仅是检查一个
【讨论】: