获取新的csrf令牌,即使当前令牌已过期

时间:2017-08-17 14:48:39

标签: laravel csrf

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

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

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

1 个答案:

答案 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验证,创建中间件,例如:

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