username_fromDB = mycol.find({"username": username})
Это неправильно, потому что find()
возвращает объект-курсор, а не имя пользователя, как вы ожидаете.
Если предположить, что коллекция loginInfo
содержит уникальные имена пользователей и соответствующие пароли, в этом нет необходимостисделать 2 find()
запросов к базе данных.Вы можете просто извлечь объект пользователя и проверить, соответствует ли введенный пароль паролю, сохраненному в базе данных.
И поскольку имена пользователей уникальны, вы должны использовать 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()