簡體   English   中英

找到與sqlite表中的用戶名對應的密碼

[英]locating a password that corresponds to a username within an sqlite table

我正在使用Flask微框架和sqlite3運行一個網站來存儲用戶登錄。 目前,我無法將用戶從HTML表單輸入的用戶名和密碼與我數據庫中的現有記錄進行匹配。

我正在使用flask-login擴展來幫助我,當我嘗試匹配時,我收到一個TypeError:

list indices必須是整數或切片,而不是str

這是我的python代碼,它將SQLite表轉換為變量:

con = sql.connect("table.db")
cur = con.cursor()
cur.execute('SELECT * FROM users')
names = cur.fetchall()

然后我有這個代碼從HTML表單中獲取密碼,並嘗試將其與鏈接到表中用戶名的密碼匹配

user_name = request.form['username']
if request.form['password'] == names[user_name]['password']:
        user = User()
        user.id = user_name
        flask_login.login_user(user)

這就是'名字'的回報:

[(7, 'ValidName', 'ValidTest', 'User@test.com'), (8, 'User2', 'password2', 'User@test2.com')]

需要做的是程序將檢查表單輸入的“密碼”,並將其與用戶名相關的“密碼”匹配。 例如,如果在表單中輸入了ValidNameValidTest ,程序將請求它們,並與“names”中的記錄匹配。

我假設您沒有密碼,這是您應該做的事情。 沒有安全性,這是我的骯臟方法

cur.execute('SELECT * FROM users WHERE name = %s AND password = %s', (request.form['username'], request.form['password']))
user = cur.fetchone()

可能會有所幫助

這是有罪的: names[user_name]['password']

namesfetchall的返回值,因此是一個普通列表。 要在上面的表達式中使用它,它應該是映射的映射。

你應該這樣構造它:

names = {row[1]: {'id': row[0], 'password': row[2], 'mail': row[3]}
         for row in cur.fetchall()}

但要注意:這會將完整的用戶數據庫加載到內存中。 只有少數用戶才有意義......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM