【发布时间】:2017-05-22 19:44:24
【问题描述】:
我需要有关网站中用户身份验证的帮助。我正在为 SQLite 使用 python flask、sqlite3 和 DB Browser。我在登录部分遇到问题。每次我尝试登录并重定向到 html 网站时,它都会显示错误 404。
这是登录页面的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8"/>
<title>PackageDrop Login</title>
<link type = "text/css" rel = "stylesheet" href="{{ url_for('static', filename='login.css') }}" />
<link type = "text/css" rel = "stylesheet" href="{{ url_for('static', filename='cssmainpage.css') }}" />
</head>
<body>
<form action="/login" method="POST" autocomplete="off">
Username:<br>
<input type="text" name="username">
<br>
Password:<br>
<input type="password" name="password">
<br><br>
<input type="submit" value="Login">
</body>
</html>
转发到的页面只是简单的html,没什么特别的,所以我不上传了。 如果您觉得需要更多信息来理解,请询问,我会尽快发布。 感谢我得到的所有帮助。
编辑1: 在 login.html 中将表单操作从“login.html”更改为“login”,现在它给出了 400 Bad Request 错误。
编辑2: 重定向有效。我已经更改了登录代码,但它产生了这个错误:“ProgrammingError:在线程中创建的 SQLite 对象只能在同一个线程中使用。该对象是在线程 id 7812 中创建的,这是线程 id 7388”。我唯一做的就是像这样连接到数据库: conn = sqlite3.connect('database.db') 这是登录的新代码:
@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
checkP = conn.execute('select pword from users where uname = request.form[\'username\']')
arrayCheck = checkP.fetchall()
if request.method == 'POST':
if request.form['password'] != arrayCheck[[0][0]]:
error = 'Incorrect password'
return redirect(url_for('login.html'))
elif len(arrayCheck) == 0:
error = 'Username or password is incorrect'
return redirect(url_for('login.html'))
else:
session['logged_in'] = True
flash('You are logged in')
return redirect(url_for("userpage"))
return render_template('login.html')
【问题讨论】:
-
再看看你的逻辑。您正在将用户名和密码值与自己进行比较。
-
@DanielRoseman 但我正在检查发布请求中的用户名和密码,然后将其与数据库中的用户名和密码进行比较。这不是你的做法吗?
-
不,你不是。你认为你在哪里这样做?你从
request.form得到用户名,然后直接和request.form['username']比较,即自己。 -
@DanielRoseman 好的,我现在明白了。那么如何检查数据库的登录凭据是否正确?