Wie zu tun, Django, JSON Web Token-Authentifizierung, ohne dass der Benutzer erneut eingeben Ihr Kennwort?

Meine Django-Anwendung verwendet die Rest-Framework JWT für die Authentifizierung. Es funktioniert Super und sehr elegant.

Allerdings habe ich ein use-case, die ich bin kämpfen, um zu bauen. Ich habe bereits codiert, bis eine funktionierende Lösung für die "Passwort Vergessen" - workflow. Ich Erlaube, dass ein un-authentifizierte Benutzer, Ihr Kennwort zurückzusetzen, wenn-und-nur-wenn Sie klicken Sie auf einen geheimen link, den ich senden, um Ihre E-Mail-Adresse. Allerdings würde ich gerne ändern, diese Lösung, so dass nach der Passwort-reset-workflow erfolgreich abgeschlossen wurde, wird der Benutzer automatisch angemeldet, ohne erneut den Benutzernamen und das (neue) Passwort. Ich möchte dies tun, um die Erfahrung des Benutzers so reibungslos wie möglich.

Das problem ist, ich weiß nicht, wie diese Arbeit zu machen, ohne dass der Benutzer erneut eingeben Ihr Kennwort ein (oder speichern Sie es in Klartext in der DB, das ist natürlich sehr schlecht). Unten ist die aktuelle Art und Weise bekomme ich die JWT token. Sie können sehen, dass in Zeile #12, ich muss der Benutzer das Passwort löschen. Ich habe es nicht. Ich habe nur das verschlüsselte Kennwort gespeichert my_user.password.

Wie kann ich das verschlüsselte Kennwort in my_user.- Passwort anstelle des klaren Passwort erhalten Sie das JWT? Wenn ich es nicht gebrauchen können, dann ist, wie dieser workflow erreicht mit dem Rest-Framework JWT?

from rest_framework_jwt.views  import ObtainJSONWebToken
from rest_framework status
from django.contrib.auth.models import User

my_user = User.objects.get(pk=1)
ojwt = ObtainJSONWebToken()

if "_mutable" in dir(request.DATA):
    mutable = request.DATA._mutable
    request.DATA._mutable = True
request.DATA['username'] = my_user.username
request.DATA['password'] = "<my_user's clear password>"
if "_mutable" in dir(request.DATA):
    request.DATA._mutable = mutable


token_response = ojwt.post(request)
if status.is_success(token_response.status_code):
     # Tell the user login succeeded!!
else:
     # Tell the user login failed.
     # But hopefully, this shouldn't happen
InformationsquelleAutor Saqib Ali | 2014-12-17
Schreibe einen Kommentar