Django 通过单击电子邮件链接登录/验证用户?

时间:2020-12-18 19:42:12

标签: django django-forms django-authentication django-login

大家好,我正在创建一个自定义 EmployeeForm,其中的表单供业务管理员使用,以添加员工。这会在数据库中创建一个新用户 Account。为了让该员工访问平台,还为他们设置了一个临时的唯一密码。创建时,会向新员工帐户电子邮件发送一封电子邮件,向他们提供他们的电子邮件和随机生成的密码。我还想包含一个链接,将它们直接发送到 Change password 视图。单击此链接后,我希望它登录用户,这样他们就不必自己转到登录页面,这样他们就已经通过身份验证/登录了,他们所要做的就是输入他们的新密码。

我想知道是否可以通过单击“更改密码”链接自动登录此用户?

我还想知道是否有一种可能的方法甚至不设置随机密码,并允许用户只需单击电子邮件链接,他们就可以自行设置初始密码。 (注意:密码不是必填字段,因此可以在没有初始密码的情况下创建员工帐户。)

class EmployeeForm(ModelForm):
    class Meta:
        model = Account # Inherits from AbstractBaseUser
        fields = ['email', 'first_name', 'last_name', 'phone_no', ]

    def save(self, commit=True):

        """Generate temp PW, trigger email"""

        email = self.instance.email
        temp_pass =  get_random_string()
        self.instance.set_password(temp_pass)
        self.send_temp_password()
        # Authenticate User to now Login
        authenticate(username=email, password=temp_pass)
        return super(EmployeeForm, self).save()

    def send_temp_password(self):
        domain = f'https://{Site.objects.get_current().domain}'
        subject = "Temporary Password/Reset Link"
        html_message = render_to_string('password_change.txt',
                                        {'domain': domain,
                                         'email': self.instance.email,
                                         'temp_pass': self.instance.password,
                                         })
        send_mail(subject, html_message, settings.DEFAULT_FROM_EMAIL,
                      [self.instance.email, ], fail_silently=True)

我想总的来说,我正在寻找有关最佳设计和安全性的方向,以便以最有效的方式进行设置。

非常感谢任何建议!

0 个答案:

没有答案
相关问题