美文网首页flask学习
flask-账号密码验证

flask-账号密码验证

作者: 你就像只铁甲小宝 | 来源:发表于2019-02-28 15:25 被阅读6次

大致思路:
1.用check_password_hash与数据库的hash密文进行比较,是否一致。
2.若不一致,提示原密码不正确,若一致,把新的密文更新到数据库中。


1.表单的定义,使用flask_wtf


class ModifypasswordForm(FlaskForm):
    old_password = PasswordField('Old Password', validators=[DataRequired(), Length(min=1, max=3, message="长度不符合")]
                                 , render_kw={"placeholder": "Password"})
    new_password = PasswordField('New Password', validators=[DataRequired(), Length(min=1, max=3, message="长度不符合")],
                                 render_kw={"placeholder": "New Password!"})
    new_password_confirm = PasswordField('Repeat Password',
                                         validators=[DataRequired(),
                                                     EqualTo('new_password', message='Passwords must match'), ],
                                         render_kw={"placeholder": "confirm New Password confirmed!"})
    submit = SubmitField("修改密码")

2.验证账号密码


实际代码:

def modify_password():
    modify_password_form = ModifypasswordForm()
    # 原密码
    old_password = modify_password_form.old_password.data
    # 新密码
    new_password = modify_password_form.new_password.data
    # 确认新的密码
    new_password_confirm = modify_password_form.new_password_confirm.data
    # 不符合验证器的错误集合
    print(modify_password_form.new_password_confirm.errors)
    # print(modify_password_form.validate_on_submit())
    # print(current_user.validation_dict["password"])
    # 获取用户的name
    # 用户数据库中的密码
    user_db_password = current_user.validation_dict["password"]
    # 新密码的hash
    new_password_hash = generate_password_hash(new_password_confirm)
    # 新密码 是否有效及符合验证器要求
    if modify_password_form.validate_on_submit():
        # 把用户输入的原密码,跟数据库中储存的密码进行对比
        # 一致
        if check_password_hash(user_db_password, old_password):
            # 把新的hash密码更新到数据库中
            current_user.validation_dict["password"] = new_password_hash
            current_user.save()
            # 消息闪现
            print('修改密码成功')
            flash('修改密码成功', "modify_password")
            return redirect(url_for('xxx'))
        # 不一致
        else:
            print('原密码错误')
            flash('原密码错误', 'modify_password')
            return redirect('xxxx')
    # 原密码与数据库中的不一致
    elif not check_password_hash(user_db_password, old_password):
        flash('原密码错误', 'modify_password')
        print('原密码错误')
        return redirect(url_for('xxx'))
    # 两次新密码不一致
    elif new_password != new_password_confirm:
        flash('两次密码不一致', 'modify_password')
        print('两次密码不一致')
        return redirect(url_for('xxx'))
    return render_template('xxx.html', form=modify_password_form)

相关文章

网友评论

    本文标题:flask-账号密码验证

    本文链接:https://www.haomeiwen.com/subject/tctnyqtx.html