Mongoose: MongoError: ошибка аутентификации

Созданный на 2 окт. 2016  ·  10Комментарии  ·  Источник: Automattic/mongoose

У меня в монголабе есть mongodb.
Если я подключусь к нему по команде

mongo uri/$db -u user -p pass

все хорошо.
Если я использую мангуст и подключаюсь через

mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}')

У меня ошибка

MongoError: Authentication failed

Я использую мангуст 4.6.1

needs clarification

Самый полезный комментарий

Хм и на какой базе данных определяется пользователь? Пользователи MongoDB привязаны к базам данных, даже если у них есть привилегии cross-db, поэтому, если пользователь, который у вас есть, не определен в db вам нужно будет указать что-то вроде mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authSource=admin') если пользователь определяется в базе данных admin.

Кроме того, если вы используете mongodb 3.x, вы можете использовать аутентификацию SCRAM-SHA-1 или нет. Попробуйте оба из следующих вариантов:

  • mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authMechanism=SCRAM-SHA-1')
  • mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authMechanism=MONGODB-CR')

Все 10 Комментарий

Также я проверил - ошибка не воспроизводится в версии 4.4.20 . Работает правильно

В вашем имени пользователя и пароле есть символы, отличные от буквенно-цифровых? Подобные проблемы возникали в прошлом при работе с такими символами, как: в паролях.

Кроме того, какая версия mongoose и mongodb?

Mongodb 'v3'
Нет, не буквенно-цифровых символов нет.

Хм и на какой базе данных определяется пользователь? Пользователи MongoDB привязаны к базам данных, даже если у них есть привилегии cross-db, поэтому, если пользователь, который у вас есть, не определен в db вам нужно будет указать что-то вроде mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authSource=admin') если пользователь определяется в базе данных admin.

Кроме того, если вы используете mongodb 3.x, вы можете использовать аутентификацию SCRAM-SHA-1 или нет. Попробуйте оба из следующих вариантов:

  • mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authMechanism=SCRAM-SHA-1')
  • mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authMechanism=MONGODB-CR')

@ vkarpov15 , да, помогло! Большое спасибо!

Я подключился к cloud.mongodb.com с помощью node.js, но я не понимаю, почему и как я сделал 2 успешных подключения, но в других случаях подключения были неудачными.
image

В консоли я вижу

параметры server / replset / mongos устарели, все их параметры поддерживаются на верхнем уровне объекта параметров [poolSize, ssl, sslValidate, sslCA, sslCert, sslKey, sslPass, sslCRL, autoReconnect, noDelay, keepAlive, connectTimeoutMS,
mily, socketTimeoutMS, reconnectTries, reconnectInterval, ha, haInterval, replicaSet, secondaryAcceptableLatencyMS, acceptLatencyMS, connectWithNoPrimary, authSource, w, wtimeout, j, forceServerObjectId, serializeFunctions, ignoreUndefined, необработанный
fferMaxEntries, readPreference, pkFactory, PromiseLibrary, readConcern, maxStalenessSeconds, loggerLevel, logger, PromoValues, PromoBuffers, PromoLongs, domainsEnabled, keepAliveInitialDelay, checkServerIdentity, validateOptions, appname, auth]

(узел: 3268) UnhandledPromiseRejectionWarning: необработанное отклонение обещания (идентификатор отказа: 1): MongoError: ошибка аутентификации
(узел: 3268) DeprecationWarning: необработанные отклонения обещаний устарели. В будущем необработанные отклонения обещаний завершат процесс Node.js с ненулевым кодом выхода.

я пробовал, но не работает,

мангуст v4.5.3
mongodb v3.4.7

errMsg :
MongoError: Authentication failed. 14|gougouS | at Function.MongoError.create (/www/website/gougouServer/source/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:31:11)

просто добавьте ?authSource=yourDB&w=1 в конец URL-адреса базы данных

mongoose.connect('mongodb://user:password@host/yourDB?authSource=yourDB&w=1')
эта работа для меня. &w=1 важно

просто добавьте ?authSource=yourDB&w=1 в конец URL-адреса базы данных

mongoose.connect('mongodb://user:password@host/yourDB?authSource=yourDB&w=1')
эта работа для меня. &w=1 важно

Спасибо, сэр. : 3 хороший ответ

Была ли эта страница полезной?
0 / 5 - 0 рейтинги