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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim arbeiten mit Django REST Framework JWT, ist es in der Regel erwartet, dass der Benutzer die Erzeugung der token auf Ihrem eigenen. Weil Sie die Generierung der token für den Benutzer, Sie können nicht die standard-Ansichten, damit es funktioniert.
Sind Sie gehen zu müssen, generiert das token auf Ihrem eigenen, ähnlich wie DRF JWT hat es in den Ansichten. Dies bedeutet, dass Sie so etwas wie den folgenden code anzeigen
Dies sollte Ihnen ermöglichen, manuell generieren der token in den Blick, ohne zu wissen, das Passwort des Benutzers.