Это та часть, в которой пользователь входит в игру. База данных размещается на mlab, существует коллекция документов с именем loginInfo
определенная как mycol
.
Проблема, с которой я столкнулась, заключается в том, что когда он возвращает идентификатор, у меня нет возможности проверить, является ли он действительным, поскольку я не смог бы проверить с помощью какого-либо локального списка в Python. Как это исправить?
import pymongo
def login():
print('Login\nRegister\nPlay as Guest')
login_input = input('What would you like to do?')
if login_input == 'Login':
username = input('Username:')
username_fromDB = mycol.find({"username": username})
if username_fromDB == username:
password = input('Password:')
password_fromDB = mycol.find({"password": password})
if password == password_fromDB:
print('Login success!\n')
mainMenu()
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()
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()