文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
请求重置密码
我上面提到过,用户有权利重置密码。因此我将在登录页面提供一个链接:
<p>
Forgot Your Password?
<a href="{{ url_for('reset_password_request') }}">Click to Reset It</a>
</p>
当用户点击链接时,会出现一个新的 Web 表单,要求用户输入注册的电子邮件地址,以启动密码重置过程。 这里是表单类:
class ResetPasswordRequestForm(FlaskForm):
email = StringField('Email', validators=[DataRequired(), Email()])
submit = SubmitField('Request Password Reset')
这里是相应的 HTML 模板:
{% extends "base.html" %}
{% block content %}
<h1>Reset Password</h1>
<form action="" method="post">
{{ form.hidden_tag() }}
<p>
{{ form.email.label }}<br>
{{ form.email(size=64) }}<br>
{% for error in form.email.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.submit() }}</p>
</form>
{% endblock %}
当然也需要一个视图函数来处理表单:
from app.forms import ResetPasswordRequestForm
from app.email import send_password_reset_email
@app.route('/reset_password_request', methods=['GET', 'POST'])
def reset_password_request():
if current_user.is_authenticated:
return redirect(url_for('index'))
form = ResetPasswordRequestForm()
if form.validate_on_submit():
user = User.query.filter_by(email=form.email.data).first()
if user:
send_password_reset_email(user)
flash('Check your email for the instructions to reset your password')
return redirect(url_for('login'))
return render_template('reset_password_request.html',
title='Reset Password', form=form)
该视图函数与其他的表单处理视图函数非常相似。 我从确保用户没有登录开始,如果用户登录,那么使用密码重置功能就没有意义,所以我重定向到主页。
当表格被提交并验证通过,我使用表格中的用户提供的电子邮件来查找用户。 如果我找到用户,就发送一封密码重置电子邮件。 我执行此操作使用的 send_password_reset_email()
辅助函数,将在下面向你展示。
电子邮件发送后,我会闪现一条消息,指示用户查看电子邮件以获取进一步说明,然后重定向回登录页面。 你可能会注意到,即使用户提供的电子邮件不存在,也会显示闪现的消息,这样的话,客户端就不能用这个表单来判断一个给定的用户是否已注册。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论