【发布时间】:2020-05-10 02:48:18
【问题描述】:
所以我有一个问题。我正在尝试验证密码对于简单的 Flask Web 应用程序是否有效。
这是我的代码的简化版本:
@app.route('/login', methods=['POST', 'GET'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user_password = db.session.query(User.password).filter(User.username == username).first()
if password != str(user_password):
return "The password is invalid."
else:
return "Login successful."
但这不起作用......它总是无效的,我想我知道为什么。 user_password 查询实际上不会将密码作为字符串返回。如果密码是 Hello1234,则返回 ('Hello1234',)。我需要的是 user_password 将返回的行作为字符串获取,以便我可以将其与用户输入进行比较。
我该怎么做?
【问题讨论】:
-
使用
user_password[0]- 即。if password != user_password[0]:BTW:但您可能必须在使用[0]之前检查您是否在user_password中获得任何值,因为您可能会得到空结果,然后[0]会出错。if user_password and password != user_password[0]: -
我必须敦促您不要将密码作为纯文本保存在您的数据库中。请不要延续循环。
-
确保您了解大数据库查询链接函数调用的返回类型。你没有得到一个字符串,这是一个带有字符串的元组,它是第一个成员。
-
@sleblanc 我必须让您知道,这仅用于测试目的,并且用于我学习时的个人项目。这不会投入生产。
-
代替.
first(),您可以使用.scalar()检索第一行中的标量值,否则使用user_password[0]选择元组中的第0个元素
标签: python flask sqlalchemy