过滤器未被浏览器后退按钮触发之前的laravel

时间:2013-06-07 07:49:31

标签: authentication laravel browser-cache back

我正在使用laravel作为我的网络应用程序。

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

与codeigniter相同的问题。需要添加头缓存控件。

答案 2 :(得分:0)

您可以在此处查看我的完整答案: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/替换为您的登录页面网址。因此,每次加载页面时,都会执行此代码。如果用户尝试访问任何受限制的页面而未登录,则他将被重定向到登录页面。如果用户在登录时尝试访问登录页面,浏览器将被重定向到主页。

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