繁体   English   中英

如何在创建用户时生成一次性密码并将其发送给 Django 中的用户邮件 ID?

[英]How to generate one time password when creating user and send the same to users mail id in Django?

我试图在创建新用户时向用户发送一个随机的一次性密码,并让他在用户第一次登录时更改密码。

我建议对此采取不同的方法。

创建用户时,将活动标志设置为 false。 所以该帐户未激活,然后无法登录。

无需生成密码,留空即可。

相反,使用特殊令牌创建 url 并发送 url。 如果用户访问此 url,它将显示一个表单来设置该用户的密码。

此链接只能使用一次,甚至可以在一定天数后过期。

您可以查看django.contrib.auth.tokens中的PasswordResetTokenGenerator以了解如何生成此类令牌并进行相应更改。

您还需要制作 url 以包含要使用的用户(可能以某种方式模糊它,因为它不明显)。

我认为有一个简单的解决方案。 首先让我描述用户 model 对任务的最低要求:

from django.contrib.auth.models import AbstractUser
# ... other import

class CustomUser(AbstractBaseUser):
  has_set_password = models.BooleanField(default=False)
  # ... other fields

另一方面,如果您不想用不必要的字段污染 model,请查看last_login字段的值,该字段来自AbstractUser model,如果用户尚未登录,则其值应为 None。

在上面的部分之后,我将为 CustomUser model 或在创建用户的视图中定义后保存方法 - 我只需分配随机的一次性密码。 用户登录后,我会检查has_set_password标志,如果为False ,则重定向他们以设置新密码(或执行其他操作),如果为True ,请登录。

希望这可以帮助。

这将对您有所帮助。 我已经尝试过自定义用户创建。 您可以先生成一个随机密码/密码,例如

from random import SystemRandom    

def user_create(username):
    new_random_obj = SystemRandom()
    #generate: 6 digits pin
    pin = new_random_obj.randrange(100000, 999999)

    user = User.objects.create_user(username=username, password=pin)

然后你在 UserManager 中的 create_user 方法可能看起来像

 def create_user(self, username, password=None, location=None):
        if not username:
            raise ValueError('User must have an username')

        user = self.model(
            username=username
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

暂无
暂无

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

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