Djoser:使用用户名重置密码
Djoser: Password Reset with Username
我使用 Django 开发了一个应用程序。它使用 Djoser 进行用户身份验证。
问题:
我允许用户使用现有的电子邮件地址注册,即可能有多个用户使用相同的电子邮件 ID。所以我不能用电子邮件字段重置密码。
我必须仅使用用户名或用户名和电子邮件的组合。
我该怎么做?
注意:- 使用基本端点 /users/reset_password/
但它只需要电子邮件来重置密码。
一个解决方案是向 djoser 添加另一个字段 SendEmailResetSerializer。
并在 SendEmailResetSerializer.get_user 方法 或验证方法中执行额外的验证。
示例:
- 在设置文件中添加自定义 SendEmailResetSerializer 的路径。
DJOSER = {
'SERIALIZERS': {
'password_reset': 'path.to.CustomSendEmailResetSerializer',
},
}
- 定义自定义序列化程序(继承自 djoser SendEmailResetSerializer。)并添加一个字段,例如用户名。
class CustomSendEmailResetSerializer(SendEmailResetSerializer):
username = serializers.CharField(required=True)
- 在 get_user 方法或验证方法中执行附加验证。
class CustomSendEmailResetSerializer(SendEmailResetSerializer):
username = serializers.CharField(required=True)
def get_user(self, is_active=True):
# Retrieve user here.
return user
我使用 Django 开发了一个应用程序。它使用 Djoser 进行用户身份验证。
问题: 我允许用户使用现有的电子邮件地址注册,即可能有多个用户使用相同的电子邮件 ID。所以我不能用电子邮件字段重置密码。 我必须仅使用用户名或用户名和电子邮件的组合。
我该怎么做?
注意:- 使用基本端点 /users/reset_password/
但它只需要电子邮件来重置密码。
一个解决方案是向 djoser 添加另一个字段 SendEmailResetSerializer。 并在 SendEmailResetSerializer.get_user 方法 或验证方法中执行额外的验证。
示例:
- 在设置文件中添加自定义 SendEmailResetSerializer 的路径。
DJOSER = {
'SERIALIZERS': {
'password_reset': 'path.to.CustomSendEmailResetSerializer',
},
}
- 定义自定义序列化程序(继承自 djoser SendEmailResetSerializer。)并添加一个字段,例如用户名。
class CustomSendEmailResetSerializer(SendEmailResetSerializer):
username = serializers.CharField(required=True)
- 在 get_user 方法或验证方法中执行附加验证。
class CustomSendEmailResetSerializer(SendEmailResetSerializer):
username = serializers.CharField(required=True)
def get_user(self, is_active=True):
# Retrieve user here.
return user