【发布时间】:2016-10-27 04:14:47
【问题描述】:
我最近发现我的 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 %}
注销.html:
{% extends 'simple_logo_base.html' %}
{% block content %}
<h2 class="text-center">Logged out</h2>
{% endblock %}
其中“simple_logo_base.html”只是简单的 html 结构,其中包含一个包含徽标的 div。
问题: 登录工作非常好。如果我尝试访问受限的 index.html 页面,我会被重定向到登录页面,可以登录并且可以访问受限页面。
一旦我登录并单击“注销”按钮(见上文),我也会被重定向到 logout.html 页面,但是,我仍然可以返回 index.html 并且我仍然处于登录状态.
因此,我查看了数据库中的“django_sessions”表,并注意到该会话从未被删除。如果我手动删除它,那么在访问 index.html 时会再次重定向到登录页面。
我做错了什么?可能是什么问题?
我最近升级到 Django 1.10 并且还在我的项目中添加了缓存框架。会不会与这些变化有关?
【问题讨论】:
标签: django django-authentication django-sessions