首页 > 解决方案 > 如何使用数据库中的文本作为用户名和密码进行身份验证?

问题描述

我的 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")

标签: pythonauthentication

解决方案


首先,您永远不应该将密码作为明文存储在数据库中,对其进行哈希处理然后存储

这实际上是一个简单的数据库查询,

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(",").


推荐阅读