【发布时间】:2015-02-16 05:50:27
【问题描述】:
我的 Django 应用程序使用 Rest Framework JWT 进行身份验证。它工作得很好而且非常优雅。
但是,我有一个我正在努力构建的用例。我已经为“忘记密码”工作流程编写了一个可行的解决方案。当且仅当他们点击我发送到他们的电子邮件地址的秘密链接时,我允许未经身份验证的用户重置他们的密码。但是,我想修改此解决方案,以便在密码重置工作流程成功完成后,用户自动登录,而无需重新输入用户名和(新)密码。我想这样做是为了让用户的体验尽可能顺畅。
问题是我不知道如何在不让用户重新输入密码(或将其以明文形式存储在数据库中,这显然非常糟糕)的情况下完成这项工作。以下是我获取 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'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
【问题讨论】:
标签: python django django-rest-framework jwt