【发布时间】:2020-12-06 15:27:18
【问题描述】:
[
您好,我正在尝试使用以下方法插入散列密码;
werkzeug.security.generate_password_hash(password, method='pbkdf2:sha256', salt_length=8)
但由于我在错误屏幕截图的第一张图片上突出显示的那行,我遇到了内部服务器错误。
我正在使用 CS50 IDE、python、sqlite3、werkerzeug 安全库
TIA
这是我的路线代码:
@app.route("/register", methods=["GET", "POST"])
def register():
"""Register user"""
# Forget any user_id
session.clear()
# User reached route via POST (as by submitting a form via POST)
if request.method == "POST":
# Ensure username was submitted
if not request.form.get("username"):
return apology("must provide username", 403)
# Ensure password was submitted
elif not request.form.get("password"):
return apology("must provide password", 403)
# Ensure password was submitted
elif not request.form.get("password2"):
return apology("must re-type password", 403)
# Check the password match
if request.form.get("password") != request.form.get("password2"):
return apology("your password didn't match")
# Query database for existing usernames
rows = db.execute("SELECT * FROM users WHERE username = :username", username=request.form.get("username"))
# Ensure username not exists
if len(rows) == 1:
return apology("username exists, please select another")
# Otherwise insert the user to the users TABLE
else:
hashed_pass = generate_password_hash((request.form.get("password")), method='pbkdf2:sha256', salt_length=len(request.form.get("password")))
db.execute("INSERT INTO users (username, hash) VALUES (:username, ?)",
username=request.form.get("username"), hash=hashed_pass)
# Return apology if cannot register
# Query database for username to check
rows = db.execute("SELECT * FROM users WHERE username = :username", username=request.form.get("username"))
if len(rows) != 1:
return apology("Sorry something went wrong, please try again")
# If register succesful
else:
return redirect("/login")
# User reached route via GET (as by clicking a link or via redirect)
else:
return render_template("register.html")
【问题讨论】:
-
参数样式不一致。不应该是这样的:
INSERT INTO users (username, hash) VALUES (:username, :hash)吗?