大致思路:
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)
网友评论