laravel - 获取新的 csrf token ,即使当前 token 已过期

标签 laravel csrf

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

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

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

最佳答案

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

<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

关于laravel - 获取新的 csrf token ,即使当前 token 已过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45738364/

相关文章:

php - 在 Laravel 中获取 foreach 循环中的所有文件

laravel - 类别和子类别查询?

php - 存储过程和包装它的 php 代码上的双重事务

spring - Redis Spring session 中的 CSRF token

javascript - 通过跨域 JavaScript 调用防止 CSRF

Laravel 5 - 创建和创建模型事件有什么区别?

javascript - 绕过 XSRF token 检查

java - CSRF 保护阻止我上传文件

java - Spring 安全: activating csrf disables/logout

Laravel - 动态添加字段到模型并阻止其保存