Laravel是否有办法获得新的CSRF令牌,即使当前令牌可能已过期?我希望能够在不更新用户界面的情况下获得新令牌。

我一直在尝试使用Visibility API,以检查浏览器(仅移动用户)是否再次处于活动状态,但是我很快发现这并不是真正的问题。如果令牌已过期,那么到目前为止,我无法获得新令牌,因为我收到了令牌不匹配异常。我想要一个新令牌,忽略任何不匹配异常,将其放入DOM中,然后让用户再次继续。

我的用户可能会经历很长的空闲时间,但是当他/她重新激活移动页面时,我希望用户能够继续他/她离开的地方,而无需让他们重新加载页面并再次提供初始数据(例如名称) 。

最佳答案

您可以在需要令牌刷新而无需刷新页面的页面上使用此脚本:

<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>


并在您的route / web.php中

Route::get('refresh-csrf', function(){
    return csrf_token();
});


您还可以在某些路由上禁用csrf_token验证,从而创建中间件,例如以下示例:

https://laracasts.com/discuss/channels/general-discussion/l5-disable-csrf-middleware-on-certain-routes

10-07 13:49