python-3.x - Drf令牌认证密码重置
问题描述
我想知道 Django 休息框架令牌身份验证是否具有密码重置属性。我有一个 Django 应用程序,我在其中使用令牌身份验证来注册和登录用户。但有人告诉我,为了让我在 Django 应用程序中实现密码重置,我必须切换到 JWT 或 Knox 等软件包。但我想在不切换到 jwt 或类似包的情况下使用 drf 令牌身份验证。我该怎么办,这可能吗?
解决方案
您可以使用Djoser,或创建一个端点,该端点可以向用户发送包含带有令牌和 uid 的链接的电子邮件,以及另一个接收 uid 和令牌并重置密码的端点。
@api_view(["GET"])
def send_resetpassword_email(request, email):
user = User.objects.get(email=email)
if user.is_active == True:
current_site = get_current_site(request)
subject = "Please Reset your password"
message = render_to_string(
"reset_password_email.html",
{
"user": user,
"domain": current_site.domain,
"uid": urlsafe_base64_encode(force_bytes(user.pk)),
"token": account_activation_token.make_token(user),
},
)
user.email_user(subject, message)
return Response(
{"message": "Reset Password Email Sent"}, status=status.HTTP_201_CREATED
)
return Response(
{"message": "user is not active"}, status=status.HTTP_400_BAD_REQUEST
)
class ResetPassword(APIView):
serializer_class = ResetPasswordSerializer
def put(self, request, uidb64, token):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
user.set_password(request.data.get("password"))
user.save()
return Response(
{"message": "Password Reset Successfull"}, status=status.HTTP_200_OK
)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
else:
return Response(
{"message": "Password Reset Failed"}, status=status.HTTP_400_BAD_REQUEST
)
所以你必须创建一个重置密码序列化程序
推荐阅读
- kubernetes - Helm 升级错误。atlassian-jira 软件入口
- web-component - 如何在 Web 组件中获取 customElement 创建的对象?
- java - 计数出现的HashMap
- angular - PrimeNG - Tree DragDrop,节点不可拖动
- salesforce - 记录编辑表单的自定义按钮
- caching - 如何在 woocommerce 产品更新中调整 litespeed 缓存?
- python - Python 请求 403 启用 Cookie
- python - 在 tkinter 画布上打一个矩形孔
- html - 在html中使用空img src时如何删除空格
- gzip - 回复:“tar-gz?” “创建 .tar.gz 文件”的词是什么