mongoengine с использованием базы данных аутентификации

Я не уверен, как подключиться к базе данных mongodb, которая использует базу данных аутентификации с mongoengine.

В командной строке мне нужно сделать mongo hostname:27017/myApp -u "test" -p "test" --authenticationDatabase admin, но я не вижу, где бы я передал это в качестве аргумента mongoengine, поэтому я использую базу данных администратора для аутентификации, но подключаюсь к базе данных myApp для своих моделей?

Я считаю, что это объясняется в руководстве PyMongo:

https://api.mongodb.com/python/current/examples/authentication.html

>>> from pymongo import MongoClient
>>> client = MongoClient('example.com')
>>> db = client.the_database
>>> db.authenticate('user', 'password', source='source_database')

и я нашел запрос на вытягивание, который добавил это в mongoengine:

https://github.com/MongoEngine/mongoengine/pull/590/files

Похоже, вы просто добавляете authentication_source в качестве аргумента к connect, как connect(authentication_source='admin'). Было бы неплохо, если бы это было лучше задокументировано.

http://docs.mongoengine.org/apireference.html?highlight=authentication_source


person Rob    schedule 06.11.2016    source источник


Ответы (4)


arrow_upward
9
arrow_downward

Согласно руководству по подключению mongoengine, метод connect() поддерживает соединения в стиле URI. то есть

connect(
   'project1'
   host='mongodb://username:password@host1:port1/databaseName'
)

В этом смысле вы также можете указать исходную базу данных аутентификации, как показано ниже:

"mongodb://username:password@host1:port1/database?authSource=source_database"

См. также URI строки подключения MongoDB для получения дополнительной информации. Примеры URI MongoDB. Также параметры аутентификации через строку подключения

person Wan Bachtiar    schedule 09.11.2016
comment
это не то, о чем я спрашиваю, источник аутентификации должен быть явно указан, поэтому то, что вы отправили, не будет работать - person Rob; 10.11.2016
comment
@Роб обновлен. Я извлек информацию из ссылки, которая позволяет указать источник аутентификации через URI. - person Wan Bachtiar; 11.11.2016

arrow_upward
4
arrow_downward

API был обновлен, поэтому сейчас это правильный способ:

connect('mydb',
        host="localhost",
        username="admin",
        password="secret",
        authentication_source='your_auth_db')
person E.Bloch    schedule 21.04.2020
comment
Я считаю, что API был обновлен с тех пор, как я задал этот вопрос еще в 2016 году, не могли бы вы указать это в своем ответе? - person Rob; 21.04.2020

arrow_upward
2
arrow_downward

Предложенное решение мне не подходит. Что работает: просто добавьте аргумент authSource в метод подключения, как если бы вы использовали метод pymongo MongoClient. Пример:

connect('database_name', host='host', username="username",
password="password",authSource='authentication_database_name')
person Rafa El    schedule 12.10.2017

arrow_upward
0
arrow_downward

Вот простое решение, которое сработало для меня.

connect(db="database_name", host="localhost", port=27017, username="username",
password="password", authentication_source="admin")
person Timam    schedule 14.07.2021