【发布时间】:2021-06-25 21:23:11
【问题描述】:
我正在尝试实现更改用户密码的功能。我只在数据库中存储哈希而不是密码,我想要求用户先输入旧密码,然后再输入新密码。我想检查旧密码的哈希是否与存储在数据库中的密码匹配,如果是,则用新密码对其进行更新。我做错了,因为代码未通过验证检查,并且出现错误:“密码无效”。 任何帮助,将不胜感激。
@app.route("/change_password", methods=["GET", "POST"])
@login_required
def change_password():
user_id=session["user_id"]
if request.method=="POST":
password = request.form.get("password")
hash = generate_password_hash(password)
new_password = request.form.get("new_password")
confirm_new_password = request.form.get("confirm_new_password")
new_hash = generate_password_hash(new_password)
#Validations:
if not password:
return apology("must provide password", 400)
if not new_password:
return apology("must provide a new password", 400)
#Ensure password confirmation is provided
if not confirm_new_password:
return apology("must confirm new password", 400)
#Check if new password matches
if new_password!= confirm_new_password:
return apology("password does not match", 400)
# Query database for the current password
rows = db.execute("SELECT * FROM users WHERE hash = ?", hash)
# Ensure username exists and password is correct
if len(rows) != 1:
return apology("invalid password", 400)
#Update DB with the new_hash
else:
db.execute ("UPDATE users SET hash=:new_hash WHERE id=:id", new_hash = new_hash, id = user_id)
return redirect("/")
else:
return render_template("change_password.html")
【问题讨论】: