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()
添加回答
举报