Meine Django-Anwendung verwendet die Rest Framework JWT für die Authentifizierung. Es funktioniert großartig und sehr elegant.Wie wird die JSON-Web-Token-Authentifizierung von Django durchgeführt, ohne dass der Benutzer sein Kennwort erneut eingeben muss?
Allerdings habe ich einen Anwendungsfall, den ich zu bauen werde kämpfen. Ich habe bereits eine funktionierende Lösung für den Workflow "Passwort vergessen" programmiert. Ich erlaube einem nicht authentifizierten Benutzer, sein Passwort nur dann und nur dann zurückzusetzen, wenn er auf einen geheimen Link klickt, den ich an seine E-Mail-Adresse sende. Ich möchte jedoch diese Lösung so modifizieren, dass nach dem Passwort-Reset-Workflow erfolgreich abgeschlossen ist, der Benutzer ist automatisch angemeldet, ohne ihre Benutzername erneut eingeben müssen und (neu) Passwort. Ich möchte dies tun, um die Erfahrung des Benutzers so reibungslos wie möglich zu machen.
Das Problem ist, ich weiß nicht, wie diese Arbeit zu machen, ohne dass der Benutzer erneut eingeben ihr Passwort (oder es in Klartext in der DB zu speichern, die offensichtlich sehr schlecht). Unten ist die aktuelle Art, wie ich das JWT-Token bekomme. Sie können sehen, dass ich in Zeile 12 das eindeutige Passwort des Benutzers brauche. Ich habe es nicht. Ich habe nur das verschlüsselte Passwort in my_user.password
gespeichert.
Wie kann ich das verschlüsselte Passwort in my_user.password anstelle des eindeutigen Passworts verwenden, um den JWT zu erhalten? Wenn ich es nicht verwenden kann, wie wird dieser Workflow dann mit dem Rest Framework JWT erreicht?
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
Terrific Antwort! Vielen Dank. Ich habe eine kleine Änderung vorgenommen: Eine Importanweisung fehlt. –
Vielen Dank für diesen Kevin. Deine Antwort trifft den Punkt! Es ist besonders nützlich, wenn Sie OAuthing auf Mobilgeräten ausführen und eine API verwenden, die mit einem Token geschützt ist. Ich habe Python Social Auth + DRF + JWT integriert – msaad
Für alle Probleme, bekommen dies funktioniert [hier] (https://codepal.herokuapp.com/how-to-add-facebook-login-to-django-using -json-web-tokens /) ist ein Schritt-für-Schritt-Tutorial zur Implementierung von JWT-basierter Authentifizierung für Django-Apps. – dvc