1 回答

TA貢獻1856條經驗 獲得超17個贊
username_fromDB = mycol.find({"username": username})
這是錯誤的,因為find()返回一個游標對象,而不是您期望的用戶名。
假設該loginInfo集合包含唯一的用戶名和相應的密碼,則無需find()對數據庫進行 2 次查詢。您可以只檢索用戶實體并檢查輸入提供的密碼是否與存儲在數據庫中的密碼匹配。
由于用戶名是唯一的,您應該使用find_one()代替find()。如果用戶被成功找到它返回dict,否則你得到None。
嘗試這樣的事情:
import pymongo
def login():
print('Login\nRegister\nPlay as Guest')
login_input = input('What would you like to do?')
if login_input == 'Login':
username_inp = input('Username:')
pwd_inp = input('Password:')
user_found = mycol.find_one({"username": username_inp}) # query by specified username
if user_found: # user exists
if pwd_inp == user_found['password']:
print('Login success!\n')
mainMenu()
else:
print('Wrong password')
else:
print('User not found')
elif login_input == 'Register':
new_username = input('Username:')
new_password = input('Password:')
tobeaddedtodb = {"username": new_username, "password": new_password}
adding = mycol.insert_one(tobeaddedtodb)
print("Registered!\n")
elif login_input == 'Play as Guest':
mainMenu()
添加回答
舉報