Eu tenho mongodb em mongolab.
Se eu conectar a ele por comando
mongo uri/$db -u user -p pass
está tudo bem.
Se eu usar o mangusto e conectar por
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}')
Eu tenho erro
MongoError: Authentication failed
Eu uso mangusto 4.6.1
Além disso, eu verifiquei - o bug não é reproduzido na versão 4.4.20
. Funciona corretamente
Seu nome de usuário e senha incluem caracteres não alfanuméricos? Problemas semelhantes surgiram no passado com o tratamento de caracteres como: em senhas
Além disso, qual versão de mangusto e mongodb?
Mongodb 'v3'
Não, não há símbolos não alfanuméricos.
Hmm também em qual banco de dados o usuário está definido? Os usuários do MongoDB têm como escopo o dbs, mesmo se tiverem privilégios cross-db, então se o usuário que você não está definido em db
você precisará colocar algo como mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authSource=admin')
se o usuário é definido no banco de dados 'admin'.
Além disso, se você estiver no mongodb 3.x, pode estar usando a autenticação SCRAM-SHA-1 ou não. Experimente as duas opções a seguir:
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authMechanism=SCRAM-SHA-1')
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authMechanism=MONGODB-CR')
@ vkarpov15 , Sim, ajudou! Muito obrigado!
Fiz conexão com cloud.mongodb.com com node.js, mas não entendo por que e como fiz 2 conexões bem-sucedidas, mas outras vezes as conexões não tiveram sucesso.
No console eu vejo
as opções server / replset / mongos estão obsoletas, todas as suas opções são suportadas no nível superior do objeto de opções [poolSize, ssl, sslValidate, sslCA, sslCert, sslKey, sslPass, sslCRL, autoReconnect, noDelay, keepAlive, connectTimeoutMS, fa
mily, socketTimeoutMS, reconnectTries, reconnectInterval, ha, haInterval, replicaSet, secondaryAcceptableLatencyMS, associatedLatencyMS, connectWithNoPrimary, authSource, w, wtimeout, j, forceServerObjectId, serializeFunctions, ignoreUndefined, raw, bu
fferMaxEntries, readPreference, pkFactory, PromessaLibrary, readConcern, maxStalenessSeconds, loggerLevel, logger, promovaValues, promovaBuffers, promovaLonga, domainsEnabled, keepAliveInitialDelay, checkServerIdentity, validateOptions, appname, auth]
(nó: 3268) UnhandledPromiseRejectionWarning: Rejeição de promessa não tratada (id de rejeição: 1): MongoError: falha de autenticação
(nó: 3268) Aviso de descontinuação: Rejeições de promessa não tratadas foram descontinuadas. No futuro, as rejeições de promessa que não são tratadas encerrarão o processo Node.js com um código de saída diferente de zero.
eu tentei, mas não funcionou,
mangusto 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)
basta adicionar ?authSource=yourDB&w=1
ao final do url do banco de dados
mongoose.connect('mongodb://user:password@host/yourDB?authSource=yourDB&w=1')
este trabalho para mim. &w=1
é importante
basta adicionar
?authSource=yourDB&w=1
ao final do url do banco de dados
mongoose.connect('mongodb://user:password@host/yourDB?authSource=yourDB&w=1')
este trabalho para mim.&w=1
é importante
Obrigado senhor. : 3 boa resposta
Comentários muito úteis
Hmm também em qual banco de dados o usuário está definido? Os usuários do MongoDB têm como escopo o dbs, mesmo se tiverem privilégios cross-db, então se o usuário que você não está definido em
db
você precisará colocar algo comomongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authSource=admin')
se o usuário é definido no banco de dados 'admin'.Além disso, se você estiver no mongodb 3.x, pode estar usando a autenticação SCRAM-SHA-1 ou não. Experimente as duas opções a seguir:
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authMechanism=SCRAM-SHA-1')
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authMechanism=MONGODB-CR')