В моем приложении Django для проверки подлинности используется Rest Framework JWT. Он отлично работает и очень элегантен.
Однако у меня есть прецедент, который я пытаюсь построить. Я уже закодировал рабочее решение для рабочего процесса "Забыли пароль". Я разрешаю неавторизованному пользователю reset их пароль, если он и только, если они нажимают на секретную ссылку, которую я отправляю на их адрес электронной почты. Однако я хотел бы изменить это решение таким образом, чтобы после успешного завершения рабочего процесса password- reset пользователь автоматически регистрировался без повторного ввода имени пользователя и (нового) пароля. Я хотел бы сделать это, чтобы сделать работу пользователя максимально трением.
Проблема заключается в том, что я не знаю, как сделать эту работу без повторного ввода пользователем пароля (или сохранения его в ясном тексте в БД, что явно очень плохо). Ниже приведен текущий способ получения токена JWT. Вы можете видеть, что в строке # 12 мне нужен пароль для очистки пользователя. У меня его нет. У меня есть только зашифрованный пароль, хранящийся в my_user.password
.
Как использовать зашифрованный пароль в my_user.password вместо пароля для получения JWT? Если я не могу его использовать, то как этот рабочий процесс достигается с помощью 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 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