【问题标题】:Laravel CSRF token expireLaravel CSRF 令牌过期
【发布时间】:2017-10-18 03:05:17
【问题描述】:

我是 Laravel 5.4 的新手,刚刚创建了一个登录表单。我注意到的事情是,如果我离开登录大约 2 小时并返回,我的 csrf 令牌将过期。是否可以显示会话已过期的 javascript 警告框,单击“确定”按钮后,它会再次将我带到登录页面?

【问题讨论】:

  • 您可以在用户提交登录表单时捕获令牌过期并将其重定向回表单并显示错误消息“登录会话已过期。请重试”或类似内容。跨度>
  • 您确定您的意思是 csrf 或会话到期?
  • 会话持续时间默认为 120 分钟,csrf 令牌由于使用会话存储而过期。是一样的。
  • 我期待 JavaScript 中有一些东西可以检查 csrf 令牌是否过期。
  • 我在某个站点上看到,当您离开站点登录时,它会自动向您显示您的会话已过期并且您必须重新登录的消息。

标签: javascript laravel csrf-protection


【解决方案1】:

你可以做一些像在你看来。使用 auth 辅助函数。

@if (! auth()->check())
      <script type="text/javascript">
                alert('session expired!!')
      </script>
@endif

编辑:

好的,上面的函数只在页面加载时运行一次,不满足 OP 要求,所以我们可以尝试直接在后端捕获 token-mismatch 异常。

因此,在 /app/Exceptions/Handler.php 的方法 render() 中,您可以尝试以下操作:

if ( $e instanceof \Illuminate\Session\TokenMismatchException ) {
    return redirect()->route('login');
}

【讨论】:

  • 如果他只是没有登录怎么办?那不会火,但没有会议开始吗?
  • 这只会在页面加载时运行。我不认为那是他想要的。
  • 这不是基于时间的检查。如果会话在登录一小时后过期,这将不起作用。
  • @SapneshNaik 我向作者推荐了这个,他希望有一个更简单的解决方案。您发布的异常捕获完美。但在普通应用程序中,您也可能希望重定向回上一页。
  • 这是我的建议。但是作者希望在用户执行一个不可避免地失败的操作之前对同一页面进行一些检查。我也向他推荐了这个stackoverflow.com/questions/44045394/laravel-csrf-token-expire/…
猜你喜欢
  • 2017-08-23
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 2022-11-07
  • 2015-02-14
  • 2017-12-12
  • 1970-01-01
相关资源
最近更新 更多