【问题标题】:Djoser: Password Reset with UsernameDjoser:使用用户名重置密码
【发布时间】:2021-10-05 12:57:26
【问题描述】:

我使用 Django 开发了一个应用程序。它使用 Djoser 进行用户身份验证。

问题: 我已允许用户使用现有的电子邮件地址进行注册,即可能有多个用户使用相同的电子邮件 ID。所以我无法使用电子邮件字段重置密码。 我必须只使用用户名或用户名和电子邮件的组合。

我该怎么做?

注意:- 使用基本端点/users/reset_password/,但它只需要电子邮件来重置密码。

【问题讨论】:

  • 首先,让不同的用户使用相同的用户电子邮件是一个非常糟糕的主意。你应该改变它。您可以在进行任何新注册之前验证电子邮件是否存在。其次,这非常简单,如果您可以像我在第一行所说的那样进行验证,那么您可以仅使用电子邮件重置通行证

标签: django django-rest-framework djoser


【解决方案1】:

一种解决方案是向 djoser SendEmailResetSerializer 添加另一个字段。 并在 SendEmailResetSerializer.get_user 方法 或 validate 方法中执行额外的验证。

示例:

  1. 在设置文件中添加自定义 SendEmailResetSerializer 的路径。
DJOSER = {
    'SERIALIZERS': {
        'password_reset': 'path.to.CustomSendEmailResetSerializer',
    },
}
  1. 定义自定义序列化程序(从 djoser SendEmailResetSerializer 继承。)并添加一个字段,例如用户名。
class CustomSendEmailResetSerializer(SendEmailResetSerializer):
    username = serializers.CharField(required=True)
  1. 在 get_user 方法或 validate 方法中执行附加验证。
class CustomSendEmailResetSerializer(SendEmailResetSerializer):
    username = serializers.CharField(required=True)

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

【讨论】:

    猜你喜欢
    • 2019-06-16
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 2023-02-08
    相关资源
    最近更新 更多