我在尝试验证凭据时遇到问题(我将在下面发布代码)。我想知道它是否正在发生,因为我将用户名和密码存储为数据库中的字符串,我应该将其存储为整数吗?
问题:我认为简单地举例说明问题是什么,也许更容易理解。
正确的信息(用户名=东西和密码=测试)
示例1:您输入“something”作为用户名,输入“password”作为密码 - 这很好用,但下一个示例是出错的地方。
示例2:您输入用户名“somethingfpsadadoia”和密码“testing” - 只要密码正确,程序就会说它是正确的。因此,只要您在用户名条目下拥有部分用户名,那么密码就可以使用,但之后的任何内容都不会被考虑为它说它实际上是错误的。
非常感谢,如果有人可以提供帮助!
“”” def Is_Valid():
UsernameValidity=UserName_Entry.get()
PasswordValidity=Password_Entry.get()
cursor.execute('''SELECT password FROM users WHERE username = ?''', (UsernameValidity,))
cursor.execute('''SELECT username FROM users WHERE password = ?''', (PasswordValidity,))
LogInAttempt = cursor.fetchone()
print (Is_Valid) # Testing to see if it works on shell
if LogInAttempt:
print (" One of the accounts have successfully logged in ")
IsValidText.config(text=" You have logged in! ", fg="black", highlightthickness=1)
myGUI.after(1000, CoreContent) # Ignore this one for now.
else:
print (" One of the accounts inputted the wrong credentials! ")
IsValidText.config(text=" Invalid username or Password! ", fg="black", highlightthickness=1)
“”“
答案 0 :(得分:1)
您正在执行两个完全独立的查询。对execute
的第二次调用会抛弃第一个结果;您从cursor
获取的内容是第二次查询的结果。
在查看每一行时,您必须告诉数据库检查两个值:
cursor.execute('SELECT 1 FROM users WHERE username = ? AND password = ?',
[UsernameValidity, PasswordValidity])
LogInAttempt = cursor.fetchone()