【问题标题】:How deny access to the previous page when a user have logged out in django?当用户在 django 中注销时,如何拒绝访问上一页?
【发布时间】:2019-03-23 13:40:55
【问题描述】:

我是 django 的新手,我在 Ubuntu 服务器中使用 1.8 版本,我成功地进行了登录和注销过程,但是当我的用户尝试转到上一页时,他们可以将其视为匿名用户.如何拒绝访问?

我尝试在我的 views.py 上使用 if 但不起作用:

def login(request):
    if not request.user.is_authenticated():
        return render(request,"base.html",{})
    return render(request,"general.html",{})

@login_required 
def general(request):
    return render(request,"general.html")

希望有人可以帮助我。

编辑: 我正在使用 django 的默认 url 登录和注销。

url(r'^$','django.contrib.auth.views.login', {'template_name': 'base.html'}, name='login'),
url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': 'login'}, name='logout'),

【问题讨论】:

  • 他们退出后可以看到general 页面吗?或者只有当他们点击浏览器上的后退按钮时?如果他们在点击后退按钮时可以看到它,那可能只是他们的浏览器缓存了页面。如果他们刷新它,他们是否能够看到该页面?
  • 只有当他们在注销后点击返回按钮时,如果我刷新页面而不是general页面,login页面就会显示
  • 连同您的视图中的 login_required,在您的模板中进行了更改。即使他们按下返回按钮,这也会阻止他们看到。我已经添加了答案。

标签: python django django-templates django-views django-1.8


【解决方案1】:

您可以使用隐藏模板,

{% if user.is_authenticated %}
<html></html>
{% else %}
<html> add for logged out user</html>
{% endif %}

如果用户在退出后点击返回按钮,这将阻止用户看到您的页面。

编辑:在您的注销功能中,您可以使用它,

from django.views.decorators.cache import cache_control

@cache_control(no_cache=True, must_revalidate=True)
 def your_function()
   #add your code
 return

这将在用户注销后清除缓存。

【讨论】:

  • 为什么这会阻止他们看到它?如果它被缓存在浏览器中,那么为什么会调用模板标签?
  • 它也不起作用,所以我必须在注销过程中清除缓存?
  • @ManuelHdezGalván 您可以查看我编辑的答案。现在更改您的注销并告诉我。
  • 嗨@BidhanMajhi嗨,抱歉直到今天才回答,我试过但仍然没有工作,我没有使用函数来进行注销过程,我在urls.py中使用它django,我用我的网址编辑了这个问题。
【解决方案2】:

我使用一个简单的脚本解决了这个问题,该脚本在用户注销“清除”缓存时重新加载,这可能不是正确的方法,但对我有用,我会尝试继续搜索一个更好的方法来做到这一点。如果有人知道,请分享。

【讨论】:

    猜你喜欢
    • 2016-01-21
    • 1970-01-01
    • 2015-08-26
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    相关资源
    最近更新 更多