【问题标题】:laravel before filter not triggered by browser back button过滤器之前的laravel不是由浏览器后退按钮触发的
【发布时间】:2013-06-03 10:54:09
【问题描述】:

我将 laravel 用于我的 Web 应用程序。

登录路径由两种方法处理
LOGIN::GET -> 显示页面以使用表单获取登录凭据。
LOGIN::POST -> 如果凭据有效,则获取发布的数据,进行身份验证并重定向到管理员的主页。

注销只是清除会话并重定向到 Login::Get。

Admin 路由具有执行身份验证的 before 过滤器。如果用户已登录,则会显示管理员的主页。

当我执行以下步骤时会弹出问题,
第 1 步:访问登录页面,输入凭据并提交。
第 2 步:验证凭据并显示管理员主页。
第 3 步:我很高兴地退出应用程序并看到登录页面。
第 4 步:按返回按钮。问题开始了,我看到的是管理员的主页。

但在我注销后,如果我输入管理员的主页 URL 并输入,我会正确重定向到登录页面。这只发生在浏览器后退按钮上。

如果这是浏览器缓存问题,我该如何控制?即使按下后退按钮,如何触发前置过滤器?

【问题讨论】:

    标签: authentication laravel browser-cache back


    【解决方案1】:

    是的,很确定它只是浏览器缓存。当您注销时,您是重定向到登录页面还是只是返回登录页面?始终重定向,可能会解决您的问题,因为当您按下返回时,您将获得登录操作,这将是无效的,因为您没有登录,然后转到登录操作。如果您按下两次,您可能仍然会遇到此问题,但这种情况非常罕见。

    【讨论】:

    • 我重定向到登录页面,但仍然出现问题。我现在所做的是,我为所有安全网页创建了一个后过滤器,并添加了元标头(缓存控制、pragme 和 expires)以避免缓存。现在没有出现这个问题,但我仍然想知道是否有其他万无一失的方法可以避免这种情况。
    【解决方案2】:

    codeigniter 也有同样的问题。需要添加头部缓存控制。

    【讨论】:

      【解决方案3】:

      你可以在这里查看我的完整答案:https://stackoverflow.com/a/26560336/434790

      我尝试在标记之前的基本模板中使用一些 javascript 代码来解决这个问题。

      <script type="text/javascript">
          $(document).ready(function() {
              var isAuth = "<?php echo Auth::check(); ?>";
      
              if (location.href === 'http://local.myapp.in/login/')
              {
                  if (isAuth) location.href('/home');
              }
              else
              {
                  if (!isAuth) location.href('/login');
              }
          });
      </script>
      

      在上面的代码中,将 http://local.myapp.in/login/ 替换为您的登录页面 URL。因此,每次加载页面时,都会执行此代码。如果用户试图在没有登录的情况下访问任何受限页面,那么他将被重定向到登录页面。如果用户在登录时试图访问登录页面,浏览器将被重定向到主页。

      既然是js代码,即使页面是从浏览器缓存加载的,这段代码也会运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-11
        • 2012-05-10
        • 1970-01-01
        • 2016-08-13
        • 2011-06-17
        • 2014-07-17
        • 1970-01-01
        • 2013-03-02
        相关资源
        最近更新 更多