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