Не удается выйти из системы аутентификации пользователя 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>
Другие вопросы по тегам