文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
重置用户密码
当用户点击电子邮件链接时,会触发与此功能相关的第二个路由。 这是密码重置视图函数:
from app.forms import ResetPasswordForm
@app.route('/reset_password/<token>', methods=['GET', 'POST'])
def reset_password(token):
if current_user.is_authenticated:
return redirect(url_for('index'))
user = User.verify_reset_password_token(token)
if not user:
return redirect(url_for('index'))
form = ResetPasswordForm()
if form.validate_on_submit():
user.set_password(form.password.data)
db.session.commit()
flash('Your password has been reset.')
return redirect(url_for('login'))
return render_template('reset_password.html', form=form)
在这个视图函数中,我首先确保用户没有登录,然后通过调用 User
类的令牌验证方法来确定用户是谁。 如果令牌有效,则此方法返回用户;如果不是,则返回 None
,并将重定向到主页。
如果令牌是有效的,那么我向用户呈现第二个表单,需要用户其中输入新密码。 这个表单的处理方式与以前的表单类似,表单提交验证通过后,我调用 User
类的 set_password()
方法来更改密码,然后重定向到登录页面,以便用户登录。
这是 ResetPasswordForm
类:
class ResetPasswordForm(FlaskForm):
password = PasswordField('Password', validators=[DataRequired()])
password2 = PasswordField(
'Repeat Password', validators=[DataRequired(), EqualTo('password')])
submit = SubmitField('Request Password Reset')
这是相应的 HTML 模板:
{% extends "base.html" %}
{% block content %}
<h1>Reset Your Password</h1>
<form action="" method="post">
{{ form.hidden_tag() }}
<p>
{{ form.password.label }}<br>
{{ form.password(size=32) }}<br>
{% for error in form.password.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form.password2.label }}<br>
{{ form.password2(size=32) }}<br>
{% for error in form.password2.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.submit() }}</p>
</form>
{% endblock %}
密码重置功能现已完成,一定要多尝试几次。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论