python - 如何使用数据库中的文本作为用户名和密码进行身份验证?
问题描述
我的 userpass.txt 是这样的:
加比尔,巴布
萨比尔,庞特
马比尔,布朗特
代替使用 bonjovi 作为用户名,使用 isagod 作为密码,如何使用文本文件的左栏与文本文件右栏中的单词关联来访问?这是如此基本的代码,因为我 15 岁,还在上学。
import time
import sqlite3
conn = sqlite3.connect("UserPass.db")
cursor = conn.cursor()
print("*"*50)
print("Authentication Database")
print("*"*50)
cursor.execute("""
CREATE TABLE tblUserPass
(
usernames TEXT,
passwords TEXT,
primary key (usernames)
)"""
)
print("tblUserPass created in UserPass.db")
def readTextFile(userFile):
numRecs = 0
userDBRec = []
userTextRec = userFile.readline()
while userTextRec != "":
numRecs += 1
field = userTextRec.split(",")
usernames = field[0]
passwords = field[1]
print(usernames, passwords)
userDBRec.append(usernames)
userDBRec.append(passwords)
cursor.execute ("insert into tblUserPass VALUES (?,?)", userDBRec)
conn.commit()
userDBRec = []
userTextRec = userFile.readline()
return numRecs
userFile = open("UserPass.txt", "r")
numRecs = readTextFile(userFile)
print("\n",numRecs, "records transferred")
userFile.close()
for rows in cursor.execute('SELECT * FROM tblUserPass'):
print(rows[1])
username=input("enter user")
password=input("enter pass")
while username!='bonjovi' or password!='isagod':
print("one of 'em incorrect")
time.sleep(1)
print("go again")
username=input("ENTER USER AGAIN")
password=input("ENTER PASS AGIAN")
print("hento and welcom")
解决方案
首先,您永远不应该将密码作为明文存储在数据库中,对其进行哈希处理然后存储。
这实际上是一个简单的数据库查询,
username=input("enter user")
password=input("enter pass")
while cursor.execute(f"SELECT * FROM tblUserPass where usernames='{username}' AND passwords='{password}'").fetchone() is None:
print("one of 'em incorrect")
time.sleep(1)
print("go again")
username=input("ENTER USER AGAIN")
password=input("ENTER PASS AGIAN")
print("hento and welcom")
查询是搜索与用户名和密码匹配的行。
最后,欢迎 SO 和 bravo 主动从零开始写东西。
编辑
在此之前,这是您初始化数据库时的一个小问题,当您这样做时userTextRec = userFile.readline()
,实际上末尾有一个换行符,因此您的所有密码(最后一行除外)都以\n
. 要删除它,请执行field = userTextRec.split('\n')[0].split(",")
.