【问题标题】:Disable browser 'Back' button after logout?注销后禁用浏览器“返回”按钮?
【发布时间】:2011-10-18 21:04:06
【问题描述】:

我正在使用 python 和 django 我希望用户在注销后单击返回按钮时重定向到登录页面。如何做到这一点?代码在哪里写?

为了测试 django admin 是否处理这个..我登录到 django admin..注销然后点击返回按钮,我可以看到上一页。为什么 django admin 不处理这个。

这是django admin中用于注销的ccode:

def logout(request):
  """
 Removes the authenticated user's ID from the request and flushes their
 session data.
 """
 request.session.flush()
 if hasattr(request, 'user'):
     from django.contrib.auth.models import AnonymousUser
     request.user = AnonymousUser()

【问题讨论】:

    标签: javascript python django django-admin


    【解决方案1】:

    这取决于您使用的是哪种身份验证系统。如果您使用某种自己的 impl,您可以编写自己的 Middleware 类,将未经身份验证的用户重定向到登录页面。

    如果您正在使用某些库,请查看其文档如何处理来自未经身份验证的用户对安全页面的请求。

    【讨论】:

      【解决方案2】:

      退出并回击后,您可以访问管理页面的原因是,您看不到真实页面。相反,您会在浏览器缓存中看到它的副本

      试试这个:

      1. 转到任何管理页面
      2. 点击“退出”
      3. 点击浏览器中的“返回”按钮
      4. 按 F5 或点击浏览器中的“刷新”。

      现在您将被重定向到管理后端的登录页面。

      【讨论】:

      • 我粘贴的代码是 django.contrib.auth.logout。它不是我自己的代码..我只使用 django admin。这个问题存在于django admin中。
      • 哦,亲爱的...*现在*我明白你在问什么。我会重写我的答案。
      • 我知道点击返回按钮后不会向服务器发送任何请求..但我仍然不希望用户像谷歌那样看到该页面
      • 好的,我想这就是你需要的:stackoverflow.com/questions/2510151/…
      【解决方案3】:

      终于找到解决办法了:

      from django.views.decorators.cache import cache_control
      
      @cache_control(no_cache=True, must_revalidate=True)
      def func()
        #some code
        return
      

      这将强制浏览器向服务器发出请求。

      【讨论】:

      • 不适用于 Safari 13.0.3 (Mac OS X Catalina 10.15.1)
      【解决方案4】:

      您可能会发现您需要在 chrome 中使用 @cache_control(no_cache=True, must_revalidate=True, no_store=True) 来完全停止查看任何后退按钮。

      我在这里找到的 chrome 的关键是 no_store 1

      【讨论】:

        【解决方案5】:

        +1 为 Digital Cake 的回答!这也解决了在 FireFox 上注销后备份到缓存页面的问题。我试过了:

        @cache_control(no_cache=True, must_revalidate=True)

        我的观点没有运气。每个数字蛋糕,尝试过:

        @cache_control(no_cache=True, must_revalidate=True, no_store=True)

        现在 Firefox 会备份到登录屏幕。

        【讨论】:

        • @GeorgeK 它确实有效!尝试将装饰器也放在登录视图上。
        • 不适用于 Safari 13.0.3 (Mac OS X Catalina 10.15.1)
        【解决方案6】:

        我知道这是一个老问题,但接受的答案对我不起作用。我遇到了同样的问题(使用 django 1.8 和 Chrome)

        最后,我从docs(django 1.7 或更高版本)中找到了解决方案。这肯定会奏效。

        请看下面的代码

        from django.contrib.auth.decorators import login_required
        
        @login_required(login_url='/login/')
        def myview(request):
            return HttpResponse(render(request,'path_to_your_view.html'))
        

        @login_required 装饰器用于处理问题。您可以在文档中查看更多内容

        【讨论】:

        • 不适用于 Safari 13.0.3 (Mac OS X Catalina 10.15.1)
        【解决方案7】:

        这是一个缓存问题。

        您可以使用 cache_control 装饰器来强制视图上没有缓存:

        from django.views.decorators.cache import cache_control
        
        @cache_control(no_cache=True, must_revalidate=True, no_store=True)
        def func()
          # some code
          return
        

        这将强制浏览器向服务器发出请求。

        更多关于cache_control

        【讨论】:

          猜你喜欢
          • 2013-07-20
          • 1970-01-01
          • 2020-06-04
          • 2017-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-09
          • 2013-06-02
          相关资源
          最近更新 更多