2016-04-01 3 views
0

Я использую django 1.8 для моего проекта, и я попытался использовать django.contrib.auth.middleware.SessionAuthenticationMiddleware в промежуточном программном обеспечении, чтобы выйти из другой сессии после сброса пароля. Это нормально, но проблема, с которой я столкнулась, - после сброса, это отключение даже этой сессии, которая изменила пароль. Я хочу, чтобы после сброса пароля сессия, в которой мы меняем пароль, не выходила из системы. Наша модель user унаследована от AbstractUserПроблема с аутентификацией Django после реселлера пароль

+0

Как вы сбрасываете пароль? – Sayse

ответ

2

Если вы используете свой собственный вид для смены пароля, django дает вам возможность обновлять сеанс после смены пароля, чтобы пользователь не выходил из системы.

Для этого вы можете использовать функцию update_session_auth_hash.

Django's user_change_password обновление сеанса после смены пароля. Но у вас есть собственные представления, вы можете использовать update_session_auth_hash так:

from django.contrib.auth import update_session_auth_hash 

def password_change(request): 
    if request.method == 'POST': 
     form = PasswordChangeForm(user=request.user, data=request.POST) 
     if form.is_valid(): 
      form.save() 
      update_session_auth_hash(request, form.user) 
    else: 
     ... 

Django документы о session invalidation on password change

Вместо того, чтобы идти через все это, вы можете использовать вместо django-allauth. Это потрясающее приложение и имеет для него все функции аутентификации.

+0

@ v1k34 что такое form.user, могу ли я передать request.user вместо некоторой строки, потому что у меня есть пользовательская форма, которая содержит только поле пароля. – Pramod

+0

Да, вы также можете передать 'request.user'. Вышеприведенный код просто позволяет обновить сеанс аутентификации пользователя, который мы предоставили для смены пароля. – v1k45

Смежные вопросы