Как выйти из Django с пользовательской моделью? - PullRequest
0 голосов
/ 08 апреля 2019

Я создал приложение и расширил AbstractUser, добавив некоторые поля в мою модель User. после того, как это сделано ... все работает как ожидалось (войти, создать пользователя, сбросить пароль ...), но когда я пытаюсь выйти из системы по умолчанию django.contrib.auth.LogoutView или include('django.contrib.auth.urls') он просто проигнорирует выход из системы. когда я возвращаюсь на страницу с ограниченным доступом, я могу зайти и посмотреть содержимое, и мой пользователь фактически вошел в систему!.

Я создал собственный вид выхода из системы, подобный этому

def custom_logout(request):
    print('Loggin out {}'.format(request.user))
    auth.logout(request)
    print(request.user)
    return HttpResponseRedirect('/restrictedpage')

на закрытой странице у меня есть печать, чтобы показать пользователю print("User logged: {}".format(request.user))

Когда я нажимаю кнопку «Выйти», в консоли появляется следующее:

"GET /restrictedpage  HTTP/1.1" 200 19820
User logged: ceterre
 ----- This is where i click logout ------
Loggin out AnonymousUser
AnonymousUser
"GET /accounts/logout/ HTTP/1.1" 302 0  ----- this redirects me to /restrictedpage
User logged: ceterre
"GET /restrictedpage HTTP/1.1" 200 19820

это буквально переводится как:

 - i know ceterre is logged
 - logging out ceterre
 - user logged: AnonymousUser
 - redirect to restricted page (where i should have no access since im supposedly logged out)
 - user logged: ceterre (without any login or anything...)

это может быть связано с кешем, или я не знаю.

1 Ответ

0 голосов
/ 08 апреля 2019

Вход и выход из системы являются частью Django (и AbstractUser тоже), поэтому вам не нужно расширять эти части кода.Одна вещь, которую вы должны сделать, это добавить в файл settings.py две строчки кода:

LOGIN_REDIRECT_URL = 'template_name'
LOGOUT_REDIRECT_URL = 'template_name'
...