Не удается выйти из системы аутентификации пользователя django
Я работаю над проектом, в котором организация войдет в систему, а затем выйдет из системы, если они захотят. Но почему-то функционал выхода из системы не работает. Перенаправление не происходит, и пользователь не может выйти из системы.
# urls.py
urlpatterns = [
path('logout',views.user_logout,name = 'logout')
]
# views.py
def user_logout(request):
if request.method == "POST":
logout(request)
return HttpResponseRedirect('login')
# template:
<a href="#" onClick="document.getElementById('logoutform').submit()" class="btn">
Logout</a>
<form id="logoutform" method="POST" action="{% url 'logout' %}">
{% csrf_token %}
<input type="hidden">
</form>
Страница просто перезагружается и перенаправление не происходит.
1 ответ
Я думаю, вы сделали это более сложным, чем нужно. Джанго идет с LogoutView
и позволяет выходить из системы с запросами GET. Вы можете использовать это представление выхода из системы или изменить свое собственное на:
from django.shortcuts import redirect
def user_logout(request):
logout(request)
return HttpResponseRedirect('login') # assumes you have a URL pattern with name='login'.
Обратите внимание, что HttpResponseRedirect('login')
будет перенаправлять на относительный URL 'login'
так что вы можете в конечном итоге в /logout/login
, Вы должны либо использовать абсолютный URL (например, HttpResponseRedirect('/login/')
), переверните URL (например, return HttpResponseRedirect(reverse('login'))
или используйте redirect
ярлык, который позаботится о реверсе для вас.
После изменения вида выхода из системы вы можете удалить форму и просто перейти на страницу выхода из системы.
<a href="{% url 'logout' %}" onClick="document.getElementById('logoutform').submit()" class="btn">Logout</a>