我创建了一个包含大量字段的表单,用户可以在其中创建无限字段。 如果用户花费更多时间,CSRF令牌将过期,当他点击提交LARAVEL时,返回错误CSRF令牌不匹配。 那么如何通过使用ajax调用来获取新的CSRF令牌,以便我可以定期更新CSRF? 我无法刷新或重新加载表单。
答案 0 :(得分:2)
在下面的代码中,您可以在登录后通过regenerate()方法获取新令牌,并返回响应csrf_token()。
Your Controller inside the function
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);
}
});
答案 1 :(得分:0)
只需将其添加到您的脚本
即可<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
如果您仍然遇到同样的问题,请查看这些内容