简体   繁体   English

Djoser:使用用户名重置密码

[英]Djoser: Password Reset with Username

I have developed an app using Django.我已经使用 Django 开发了一个应用程序。 It uses Djoser for user authentication.它使用 Djoser 进行用户身份验证。

Problem: I have allowed user to register with already existing email addresses ie there might be multiple users using same email ID.问题:我允许用户使用现有的电子邮件地址进行注册,即可能有多个用户使用相同的电子邮件 ID。 So I can't reset password with the email field.所以我无法使用电子邮件字段重置密码。 Either I must use username only or the combination of username and email.我必须仅使用用户名或用户名和电子邮件的组合。

How can I do this?我怎样才能做到这一点?

Note:- Using base endpoint /users/reset_password/ but it requires email only to reset the password.注意:- 使用基本端点/users/reset_password/但它只需要电子邮件来重置密码。

One solution would be to add another field to djoser SendEmailResetSerializer .一种解决方案是向 djoser SendEmailResetSerializer添加另一个字段。 and perform additional validation in SendEmailResetSerializer.get_user method or validate method.并在SendEmailResetSerializer.get_user 方法或 validate 方法中执行额外的验证。

example:例子:

  1. In settings file add the path to a custom SendEmailResetSerializer.在设置文件中添加自定义 SendEmailResetSerializer 的路径。
DJOSER = {
    'SERIALIZERS': {
        'password_reset': 'path.to.CustomSendEmailResetSerializer',
    },
}
  1. Define the custom serializer (inherit from djoser SendEmailResetSerializer.) and add a field, username for example.定义自定义序列化程序(从 djoser SendEmailResetSerializer 继承。)并添加一个字段,例如用户名。
class CustomSendEmailResetSerializer(SendEmailResetSerializer):
    username = serializers.CharField(required=True)
  1. Perform additional validation in get_user method or validate method.在 get_user 方法或 validate 方法中执行额外的验证。
class CustomSendEmailResetSerializer(SendEmailResetSerializer):
    username = serializers.CharField(required=True)

    def get_user(self, is_active=True):
        # Retrieve user here.
        return user

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM