如何使用 ajax 在 LARAVEL 中获取新的 CSRF 令牌
Posted
技术标签:
【中文标题】如何使用 ajax 在 LARAVEL 中获取新的 CSRF 令牌【英文标题】:How can I get new CSRF token in LARAVEL by using ajax 【发布时间】:2018-01-21 22:15:27 【问题描述】:我创建了一个包含很多字段的表单,用户可以在其中创建无限的字段。 如果用户在它上面花费更多时间,CSRF 令牌就会过期,并且当他点击提交时,LARAVEL 会返回错误 CSRF 令牌不匹配。 那么如何通过使用 ajax 调用获取新的 CSRF 令牌,以便定期更新 CSRF? 我无法刷新或重新加载表单。
【问题讨论】:
Handling expired token in Laravel的可能重复 【参考方案1】:通过使用此代码,您可以在登录后使用regenerate()
方法获取新令牌,并在响应中返回一个新的csrf_token()
。
你在函数中的控制器:
public function refreshToken(Request $request)
session()->regenerate();
return response()->json([
"token"=>csrf_token()],
200);
$.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);
);
【讨论】:
感谢您的提示。我使用这种方法在准备好 ajax 的文档上加载新的 CSRF 令牌,以从 Laravel 缓存响应中替换静态页面中的所有令牌。【参考方案2】:只需将其添加到您的脚本中
<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
如果您仍然发现同样的问题,请查看这些内容
Handling expired token in Laravel
https://laracasts.com/discuss/channels/laravel/csrf-token-mismatch-error-on-session-timeout-form?page=1
并确保您查看所有答案,而不仅仅是检查一个
【讨论】:
是的@Geoffrey。我只是顺便改了名字 实际上,我也在做同样的事情,但是这个密钥会在一段时间后过期,所以我需要新密钥而不重新加载页面。 在这种情况下,您可能需要看看这些东西。 1.***.com/questions/31449434/… 2.laracasts.com/discuss/channels/laravel/….并确保您查看所有答案,而不仅仅是检查一个。 嘿,是的,Brain 你能把这个答案放在原始答案中,这样我就可以将它标记为正确的解决方案。非常感谢,这是最简单的解决方案。 已添加。 @FIROZTENNALI以上是关于如何使用 ajax 在 LARAVEL 中获取新的 CSRF 令牌的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AJAX 调用中获取 JavaScript 变量作为 Laravel 路由名称
Laravel:如何在数据表中使用 ajax 对数据进行排序?
在 Laravel 中使用 Ajax/jQuery 从数据库中获取数据