Я пытаюсь внедрить флажок «запомнить меня» во встроенный в django LoginView, как предложено для этого вопроса , но даже если я вызываю set_expiry (0), сеансы по-прежнему истекают после SESSION_COOKIE_AGE
, независимо от даты истечения срока действия cookie (которая правильно установлена на 1969).
Я использую django 2.1.7 с python 3.7.2, и единственными настройками, относящимися к сеансу на моем settings.py
, являются SESSION_COOKIE_AGE
, который установлен на 5 секунд для отдыха.
Кажется, что Django использует базу данных по умолчанию.Я использую sqlite для разработки.
Это мой класс просмотра:
class UserLoginView(LoginView):
form_class = registration.UserLoginForm
def form_valid(self, form):
remember = form.data.get('remember_me', False)
if remember:
self.request.session.set_expiry(0)
return super(UserLoginView, self).form_valid(form)
И это original LoginView form_valid
метод (переопределяемый выше)
class LoginView(SuccessURLAllowedHostsMixin, FormView):
...
def form_valid(self, form):
"""Security check complete. Log the user in."""
auth_login(self.request, form.get_user())
return HttpResponseRedirect(self.get_success_url())
...
Как вы заметили, я использую пользовательский класс form_class.Очень простое переопределение формы по умолчанию:
class UserLoginForm(AuthenticationForm):
remember_me = BooleanField(required=False)
Если я использую отладчик сразу после вызова set_expiry, я вижу, что срок действия сеанса по-прежнему равен 5 секундам по умолчанию:
> /project/app/views/accounts.py(64)form_valid()
-> return super(UserLoginView, self).form_valid(form)
(Pdb) self.request.session.get_expiry_age()
5
Я получаю аналогичные результаты, если разрешить запрос завершить и перенаправить, перейти к следующему представлению и, наконец, отобразить шаблон, в котором у меня есть:
...
{{ request.session.get_expiry_age }}
...
Отображаемый результат также равен 5 (текущее значение по умолчанию).
Конечно, через 5 секунд, если вы обновите страницу, django вернет вас на экран входа в систему.
Что я здесь не так делаю?Было бы неплохо, если бы кто-то мог уточнить, что здесь означает "веб-браузер закрыт"?https://docs.djangoproject.com/en/2.2/topics/http/sessions/#django.contrib.sessions.backends.base.SessionBase.set_expiry