2016-04-01 11 views
0

Ich benutze Django 1.8 für mein Projekt und ich habe versucht, mit django.contrib.auth.middleware.SessionAuthenticationMiddleware in Middleware die andere Sitzung nach dem Zurücksetzen des Passworts abzumelden. Das ist in Ordnung, aber das Problem, mit dem ich konfrontiert bin, ist nach dem Zurücksetzen das Abmelden selbst dieser Sitzung, die das Passwort geändert hat. Ich möchte, dass nach dem Zurücksetzen des Passworts die Sitzung, in der wir das Passwort ändern, nicht abgemeldet wird. Unser user Modell wird von AbstractUserDjango Authentifizierungsproblem nach dem Zurücksetzen des Passworts

+0

Wie setzen Sie das Passwort zurück? – Sayse

Antwort

2

geerbt. Wenn Sie Ihre eigene Ansicht verwenden, um das Passwort zu ändern, können Sie die Sitzung nach dem Ändern des Passworts aktualisieren, sodass der Benutzer nicht abgemeldet wird.

Dafür können Sie update_session_auth_hash Funktion verwenden.

Djangos user_change_password aktualisieren die Sitzung nach der Kennwortänderung. Aber für Sie benutzerdefinierte Ansichten besitzen, können Sie update_session_auth_hash wie folgt verwenden:

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 docs über session invalidation on password change

Statt durch das alles geht, können Sie django-allauth stattdessen verwenden. Es ist eine tolle App und verfügt über alle Arten von Authentifizierungsfunktionen.

+0

@ v1k34 was ist form.user, kann ich request.user statt oder eine Zeichenfolge übergeben, weil ich ein benutzerdefiniertes Formular habe, das nur Passwort-Feld enthält. – Pramod

+0

Ja, Sie können auch 'request.user' übergeben. Der obige Code stellt lediglich sicher, dass die Sitzungsauthentifizierung des von uns bereitgestellten Benutzers aktualisiert wird, um das Passwort zu ändern. – v1k45

Verwandte Themen