Не удается аутентифицироваться с помощью MongoEngine. PyMongo работает. Как я могу получить MongoEngine для аутентификации? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь пройти аутентификацию для базы данных MongoDB с помощью mongoengine.connect (). Когда я использую pymongo.MongoClient (), код работает отлично, однако mongoenine.connect () выдает эту ошибку:

pymongo.errors.OperationFailure: command createRole requires authentication

Я считаю, что параметры подключения идентичны, и MongoEngine использует PyMongo для подключения в любом случае, поэтому я не понимаю, что здесь не так.

Я напечатал MongoClients, возвращенные PyMongo и MongoEngine, и они немного отличались:

Pymongo MongoClient:

MongoClient(host=['x.x.x.x:27017'], document_class=dict, tz_aware=False, connect=True)

MongoEngine MongoClient:

MongoClient(host=['x.x.x.x:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary())

Влияет ли read_preference на мою способность каким-либо образом подключаться?

Вот код звонка:

user_admin_client = pymongo.MongoClient(
    f'mongodb://{usern}:{pswd}@x.x.x.x/my_db'
)
print(user_admin_client)

user_admin_client = mongoengine.connect(db='my_db',
                                        username=usern,
                                        password=pswd,
                                        host='x.x.x.x',
                                        alias='init'
                                                )
print(user_admin_client)

Как мне заставить MongoEngine работать? Что я тут не так делаю?

------ Обновление от 5.09.19:

Я попробовал следующий код:

user_admin_client = mongoengine.connect(
        f'mongodb://{usern}:{pswd}@x.x.x.x/my_db'
        )
    print(user_admin_client)

Я получил следующее:

MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary())
...traceback...
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] No connection could be made because the target machine actively refused it

Меня немного смущает вопрос, почему MongoClient сейчас пытается подключиться к localhost, потому что мой IP-адрес определенно правильно введен. Даже использование x.x.x.x:port ничего не делало.

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Вам нужно использовать параметр host при подключении

user_admin_client = mongoengine.connect(host='mongodb://{usern}:{pswd}@x.x.x.x/my_db')
0 голосов
/ 09 мая 2019

Я не думаю, что вы делаете что-то не так здесь.

Можете ли вы попробовать использовать Mongo URI для подключения через MongoEngine.

Что-то вроде:

user_admin_client = mongoengine.connect('mongodb://{usern}:{pswd}@x.x.x.x/my_db')
print(user_admin_client)
...