我最近发现我的Django应用程序的注销功能似乎被打破了。我相信它在过去有效,但我无法弄清楚为什么它现在不起作用。
这就是我的设置:
的index.html:
...
{% if request.user.is_authenticated %}
<a style="position: absolute; top: 0; left: 0;" href="{% url 'auth_logout' %}">Logout</a>
{% else %}
<a style="position: absolute; top: 0; left: 0;" href="{% url 'auth_login' %}">Login</a>
{% endif %}
...
urls.py:
...
from django.contrib.auth import views as auth_views
...
urlpatterns = [
...,
url(r'^accounts/logout/$', auth_views.logout, name='auth_logout'),
url(r'^accounts/login/$', auth_views.login, name='auth_login'),
...
]
模板:
的login.html:
{% extends 'simple_logo_base.html' %}
{% block content %}
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<h2>Login</h2>
{% if next %}
<form action="/accounts/login/?next={{next}}" method="post" >
{%else%}
<form action="/accounts/login/" method="post" >
{% endif %}
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
</div>
<div class="col-md-3"></div>
</div>
{% endblock %}
logout.html:
{% extends 'simple_logo_base.html' %}
{% block content %}
<h2 class="text-center">Logged out</h2>
{% endblock %}
其中&#34; simple_logo_base.html&#34;只是普通的html结构,带有包含徽标的div。
问题: 登录工作完全正常。如果我尝试访问受限制的index.html页面,我将被重定向到登录页面,可以登录并可以访问受限页面。
登录后,我点击&#34;退出&#34;按钮(见上文)我也被重定向到logout.html页面,但是,我仍然可以返回index.html并且我仍然登录。
因此,我看了一下&#34; django_sessions&#34;数据库中的表,并注意到会话永远不会被删除。如果我手动删除它,那么在访问index.html时我会再次被重定向到登录页面。
我做错了什么?可能是什么问题?
我最近升级到了Django 1.10并且还在我的项目中添加了缓存框架。它可能与任何这些变化有关吗?
答案 0 :(得分:0)
我同时解决了这个问题。但是,我不确定究竟是什么问题。如果其他人遇到类似的问题,这里有我尝试过的东西(这显然解决了我的问题):
我认为问题主要与缓存有关。使用@cache_page装饰器时,缓存仅基于请求的URL。因此,每个用户都收到了相同的缓存页面,即使他已经注销了。但是,这并不能解释在注销时未删除会话的原因。所以也许其他东西是这里的主要问题。