烧瓶登录 sqlite3 数据库身份验证



我正在创建一个登录 Web 应用程序,用于验证密码,并显示登录用户中的一些选定列,但它不是仅显示登录用户的选定列,而是显示数据库中所有用户的选定列。 以下是代码。

用户登录的路由

def validate4(username,password):
con = sqlite3.connect('static/Users.db')
with con:
cur = con.cursor()
cur.execute("SELECT * FROM Nbc")
users = cur.fetchall()
for user in users:
dbUser = user[0]
dbPass = user[1]
if dbPass == password:
completion=(dbUser, username)

return users   


@app.route('/nbc', methods=['GET', 'POST'])
def nbc():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
users= validate4(username,password)
return render_template('nbc.html', users=users)
else:          
flash ( 'Invalid Credentials. Please try again.')
return render_template('nbc.html')

HTML 模板

<html lang="en">
<head>
<link rel="stylesheet" href="/static/event.css" type="text/css">
</head>
<body>
<form action="/nbc" method="POST">
<div class="login">
<div class="login-screen">
<div class="app-title">
<h1>Login</h1>
</div>
<div class="login-form">
<div class="control-group">
<input type="text" class="login-field" placeholder="username" name="username" value="{{ request.form.username }}">
<label class="login-field-icon fui-user" for="login-name"></label>
</div>
<div class="control-group">
<input type="password" class="login-field" placeholder="password" name="password" value="{{ request.form.password }}">
<label class="login-field-icon fui-lock" for="login-pass"></label>
</div>
<input type="submit" value="Log in" class="btn btn-primary btn-large btn-block">
<br>
<div id="navbar" class="app-titl">
<a class="nav navbar-nav"></a>
<li class="active"><a href="{{ url_for('index') }}">Home</a></li>
<a href="{{ url_for('index') }}"></a>

</div>
</div>
</div>
</div>
</form>
{% if users%}
<div class="table">
<table>
{%for user in users%}
<ul style="list-style-type:disc">
<li>{{user[2]}}</li>
<li>{{user[3]}}</li>
<li>{{user[4]}}</li>
</ul>
{%endfor%}
</table>
</div>
{%endif%}
</body>
</html>

帮助

尝试:

return user

而不是:

return users   

并更改:

<table>
{%for user in users%}
<ul style="list-style-type:disc">
<li>{{user[2]}}</li>
<li>{{user[3]}}</li>
<li>{{user[4]}}</li>
</ul>
{%endfor%}
</table>

自:

<table>
<ul style="list-style-type:disc">
<li>{{user[2]}}</li>
<li>{{user[3]}}</li>
<li>{{user[4]}}</li>
</ul>
</table>

顺便说一句,这个查询确实效率低下且不安全。您永远不会检查数据库中的用户名是否与表单中的用户名匹配,您只需循环访问密码,直到找到正确的密码。但是,如果两个人拥有相同的密码怎么办?也;无需查找所有用户,只需查询数据库以查找当前用户名。最后,对数据库中的密码进行哈希处理。

最新更新