У меня в монголабе есть mongodb.
Если я подключусь к нему по команде
mongo uri/$db -u user -p pass
все хорошо.
Если я использую мангуст и подключаюсь через
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}')
У меня ошибка
MongoError: Authentication failed
Я использую мангуст 4.6.1
Также я проверил - ошибка не воспроизводится в версии 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 успешных подключения, но в других случаях подключения были неудачными.
В консоли я вижу
параметры 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 хороший ответ
Самый полезный комментарий
Хм и на какой базе данных определяется пользователь? Пользователи 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')