Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: RobОтветов: 4

Я не уверен, как подключиться к базе данных 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

pythonmongodbmongoengine

Ответы

Ответ 1 · рейтинг 9 · Wan Bachtiar

Согласно руководству по подключению 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. Также параметры аутентификации через строку подключения

Ответ 2 · рейтинг 4 · E.Bloch

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

connect('mydb',
        host="localhost",
        username="admin",
        password="secret",
        authentication_source='your_auth_db')

Ответ 3 · рейтинг 2 · Rafa El

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

connect('database_name', host='host', username="username",
password="password",authSource='authentication_database_name')

Ответ 4 · Timam

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы