Laravel是否有办法获取新的CSRF令牌,即使当前令牌可能已过期?我希望能够在不更新用户界面的情况下获得新令牌。
我一直在尝试使用Visibility API来检查浏览器(仅限移动用户)是否再次处于活动状态,但我很快发现这不是问题所在。如果令牌已过期,到目前为止我无法获得新令牌,因为我收到令牌不匹配异常。我想要一个新的令牌,忽略任何不匹配的异常,把它放在DOM中,让用户再次继续。
我的用户可能会遇到很长的空闲时间,但当他/她重新启动移动页面时,我希望用户能够继续他/她离开的地方,而无需让他们重新加载页面并提供初始数据(如名字)再次。
答案 0 :(得分:2)
您可以在需要令牌刷新的页面上使用此脚本,而无需刷新页面:
<script type="text/javascript">
var csrfToken = $('[name="csrf_token"]').attr('content');
setInterval(refreshToken, 3600000); // 1 hour
function refreshToken(){
$.get('refresh-csrf').done(function(data){
csrfToken = data; // the new token
});
}
setInterval(refreshToken, 3600000); // 1 hour
</script>
在你的routes / web.php
中Route::get('refresh-csrf', function(){
return csrf_token();
});
您还可以在某些路由上禁用csrf_token验证,创建中间件,例如: