当用户通过在 Chrome 上返回历史记录注销时,Django @login_required View 仍然显示

标签 django caching google-chrome login-required

::编辑::

@cache_control(no_cache=True, Must_revalidate=True, no_store=True) FTW!!!!!!

缓存控制:无缓存、无存储、必须重新验证就可以了。我花了一些时间去找几个 IRC channel 并环顾四周,但最终我成功了。

::编辑::

我有一个 View ,我在其中设置了@login_required,并且它在很大程度上是安全的,但是如果您查看了该 View ,然后注销并只需点击浏览器中的后退按钮,您就可以使用以下命令再次查看内容被要求登录。不过,如果您刷新页面,服务器将重定向您。

我的暂停是一个缓存问题,也许我需要告诉 chrome 不要将其存储在历史记录中。

例如,如果您查看发票,然后注销,您可以通过在后台历史记录中选择该页面来再次查看发票。

我已经在 Firefox 上尝试过这个问题,没有问题。 firefox 要求您登录后端,因此这一定是浏览器问题。

最佳答案

你是对的,这是缓存问题。

您可以使用 cache_control 装饰器强制在 View 上不缓存[1]:

from django.views.decorators.cache import cache_control

@cache_control(no_cache=True, must_revalidate=True, no_store=True)
def func()
  #some code
  return

您还应该编写自己的装饰器来替换 @login_required,这样您就不需要在每个页面上都使用两者。

[1] Disable browser 'Back' button after logout?

关于当用户通过在 Chrome 上返回历史记录注销时,Django @login_required View 仍然显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625046/

相关文章:

带有空参数的 django 模板 url 标签

python - 如何根据字典属性唯一合并字典列表

python - Django AUTHENTICATION_BACKENDS 导入错误

Heroku 上的 Django

android - OkHttp + 改造离线缓存不起作用

java - 米娜和 Websocket

google-chrome - 为什么 WebGL 渲染速度如此不一致?

java - GreenDao - 自定义数据缓存无法正常工作

jQuery .load 浏览器缓存覆盖主体类转换

python - Selenium 无法打开指定的 URL 并显示数据 :,