在 Flask 中验证登录凭据的问题
Problem for authenticating login creds in Flask
我正在尝试验证来自我的 login.html 文件的登录请求
<form action="{{ url_for('login') }}" method="post">
<div class="col-sm-6">
<h2>Already a user, Login here!</h2>
<div class="form-group">
<input class="form-control" name="username" placeholder="username" required>
</div>
<div class="form-group">
<input type="password" class="form-control" name="password" placeholder="password" required>
</div>
<div class="form-group">
<button class="btn btn-primary">Log In</button>
</div>
</div>
</form>
这是烧瓶片段
@app.route("/login", methods=["POST"])
def login():
username = request.form.get("username")
password = request.form.get("password")
if db.execute("SELECT username FROM users WHERE username=:username AND password=:password", {"username": username, "password": password}).fetchone() == username:
session['username'] = username
return render_template("home.html")
return render_template("error.html", message="username or password is incorrect",prompt="alert alert-warning")
当我输入错误的凭据时,它会提示我输入错误的凭据消息,这是我非常想要的。现在的问题是,如果我添加了正确的信用,那么它也会向我显示相同的消息。我的数据库连接正确,没有问题。我编写查询的方式有问题吗,因为我是 Flask 的初学者并且 SQL
fetchone
return 是一个序列(列表),因此 if
测试永远不会为真。
fetchone()
Fetches the next row of a query result set, returning a single sequence, or None when no more data is available.
一个选项:由于 fetchone
的结果是一个列表,因此要与用户名进行比较的元素将是 returned 的第一个成员,即 ....fetchone()[0]
.
另一个选项:假设 username
是唯一的,查询将 return 一行或没有行。如果没有行,fetchone
将 return None
。 None
是错误的,因此 if
子句中不需要相等。
我正在尝试验证来自我的 login.html 文件的登录请求
<form action="{{ url_for('login') }}" method="post">
<div class="col-sm-6">
<h2>Already a user, Login here!</h2>
<div class="form-group">
<input class="form-control" name="username" placeholder="username" required>
</div>
<div class="form-group">
<input type="password" class="form-control" name="password" placeholder="password" required>
</div>
<div class="form-group">
<button class="btn btn-primary">Log In</button>
</div>
</div>
</form>
这是烧瓶片段
@app.route("/login", methods=["POST"])
def login():
username = request.form.get("username")
password = request.form.get("password")
if db.execute("SELECT username FROM users WHERE username=:username AND password=:password", {"username": username, "password": password}).fetchone() == username:
session['username'] = username
return render_template("home.html")
return render_template("error.html", message="username or password is incorrect",prompt="alert alert-warning")
当我输入错误的凭据时,它会提示我输入错误的凭据消息,这是我非常想要的。现在的问题是,如果我添加了正确的信用,那么它也会向我显示相同的消息。我的数据库连接正确,没有问题。我编写查询的方式有问题吗,因为我是 Flask 的初学者并且 SQL
fetchone
return 是一个序列(列表),因此 if
测试永远不会为真。
fetchone()
Fetches the next row of a query result set, returning a single sequence, or None when no more data is available.
一个选项:由于 fetchone
的结果是一个列表,因此要与用户名进行比较的元素将是 returned 的第一个成员,即 ....fetchone()[0]
.
另一个选项:假设 username
是唯一的,查询将 return 一行或没有行。如果没有行,fetchone
将 return None
。 None
是错误的,因此 if
子句中不需要相等。