首页 > 解决方案 > 电子邮件临时密码

问题描述

您好,我是 django 和网络编程的新手。我正在为我的学校建立一个网站,允许学生安排在线咨询约会。

我需要能够将学生的临时密码通过电子邮件发送到他们的学生电子邮件中,然后在下一页上对其进行验证。我有一个电子邮件表格:


    class EmailForm(forms.Form):
    student_email = forms.EmailField(max_length = 200, label = 'Mail')
    def clean_student_email(self):
        student_email = self.cleaned_data['student_email']
        if not student_email.endswith('.edu'):
                raise ValidationError("Please enter your school email that ends with @edu")
        return student_email

和登录视图


    def login(request):
    if request.method == 'POST':
        form = EmailForm(request.POST)
        if form.is_valid():
            student_email = form.cleaned_data['student_email']
            random_code = get_random_string()
            subject = "Temporary Advising Code"
            message = f'Your temporary code is: \n code: {random_code}'
            send_mail(subject, message, 'advising email', [student_email])
            return HttpResponseRedirect('/enter_code/', {'form' : form})
        
    else:
        form = EmailForm()
    return render(request, 'login/login.html', {'form' : form})

现在我可以生成一个随机字符串并将其发送给学生的电子邮件,但我想知道是否有人可以告诉我如何在下一页验证该字符串。

标签: pythondjango

解决方案


我会反对你的做法。

但我建议检查密码重置令牌生成器在 django 中的工作方式。

来源:PasswordResetTokenGenerator

你可以做一些非常相似的东西来生成一个你将发送给学生的令牌。

您不需要存储此类令牌,​​因为您可以轻松地再次生成它(在验证时)。

所以这里的想法是使用一些数据生成令牌,这些数据在学生更改或设置密码后 - 令牌将不再有效。

如果需要,您甚至可以合并到期时间。

而且您也不需要生成临时密码(这是我不太喜欢的东西)。

因此,与其向学生发送临时密码并要求他们使用该密码登录 - 您只需向他们发送带有令牌的链接并使用该令牌访问页面 - 他们将能够设置密码。


推荐阅读