python - 电子邮件临时密码
问题描述
您好,我是 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})
现在我可以生成一个随机字符串并将其发送给学生的电子邮件,但我想知道是否有人可以告诉我如何在下一页验证该字符串。
解决方案
我会反对你的做法。
但我建议检查密码重置令牌生成器在 django 中的工作方式。
来源:PasswordResetTokenGenerator
你可以做一些非常相似的东西来生成一个你将发送给学生的令牌。
您不需要存储此类令牌,因为您可以轻松地再次生成它(在验证时)。
所以这里的想法是使用一些数据生成令牌,这些数据在学生更改或设置密码后 - 令牌将不再有效。
如果需要,您甚至可以合并到期时间。
而且您也不需要生成临时密码(这是我不太喜欢的东西)。
因此,与其向学生发送临时密码并要求他们使用该密码登录 - 您只需向他们发送带有令牌的链接并使用该令牌访问页面 - 他们将能够设置密码。
推荐阅读
- react-native - 创建反应本机应用程序类型的问题
- elasticsearch - 如何在 Kibana 的索引模式中更新 timeFieldName
- docker - 无法创建 HyperLedger 网络
- c++ - GCC/Clang 中这个奇怪的表达是什么?
- javascript - tofixed(2) 函数按名称应用于 html 类
- python - ValueError:在权重中检测到 NaN、inf 或无效值,估计不可行
- html - 如何调整使用 css 属性边框图像应用的拉伸图像的图像质量?
- python - 如何使用 Django/Python 获取 Google Cloud 上的 Postgres 数据库列表
- python - 根据另一个数据框中日期之间的范围合并熊猫数据框
- python - 使用 Django 将图像保存在数据库中,给出错误“具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”