當用戶嘗試使用無效憑據連接到資料庫時,我試圖讓“error_statement_wrong”變數顯示出來,但我讓 Werkzeug 出現并說明:
“mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'xxx'@'DESKTOP-xxxxx'(使用密碼:YES)”
所以我知道代碼很可能沒問題,但我無法檢查錯誤陳述句是否確實出現在 Web 前端。我如何檢查這個?
@app.route('/login', methods=["POST","GET"])
def login():
if request.method == 'POST':
user_name = request.form.get('user_name')
pass_word = request.form.get('pass_word')
mydb = mysql.connect(
host="127.0.0.1",
user=user_name,
password=pass_word,
database = "test_db"
)
mycursor = mydb.cursor()
sql = "select username, password from user where username=%s and password=%s"
val = (user_name, pass_word)
mycursor.execute(sql, val)
result = mycursor.fetchone()
if result:
success_statement = "Successfully logged in"
return render_template("index0.html", success_statement=success_statement)
else:
error_statement_wrong = "Wrong credentials"
return render_template("login.html", error_statement_wrong=error_statement_wrong, user_name=user_name, pass_word=pass_word)
else:
return render_template("login.html")
uj5u.com熱心網友回復:
問題是mysql.connect拋出錯誤(如果您沒有使用app.run,那將導致包裝 Web 服務器出現丑陋的 500 錯誤)。
解決方法是try連接到資料庫并正確處理例外:
try:
mydb = mysql.connect(
host="127.0.0.1",
user=user_name,
password=pass_word,
database = "test_db"
)
# ... snip ...
if not result:
raise InvalidUserException("Username or password is invalid")
except (InvalidUserException, ProgrammingError):
return return render_template("login.html", error_statement_wrong="Wrong credentials", user_name=user_name, pass_word=pass_word)
也就是說,您的用戶是否真的使用您為 Web 應用程式存盤在資料庫中的相同憑據連接到資料庫?您是否以純文本形式存盤密碼?(如果是這樣,您應該了解有關散列的更多資訊,并確保您對密碼使用了良好的單向散列)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/369705.html
上一篇:計算回應時間
