簡體   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