返回介绍

请求重置密码

发布于 2025-01-02 21:53:52 字数 2189 浏览 0 评论 0 收藏 0

我上面提到过,用户有权利重置密码。因此我将在登录页面提供一个链接:

    <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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文