我在 mongolab 中有 mongodb。
如果我通过命令连接到它
mongo uri/$db -u user -p pass
没关系。
如果我使用猫鼬并通过以下方式连接
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}')
我有错误
MongoError: Authentication failed
我用猫鼬4.6.1
另外,我已经检查过 - 在4.4.20
版本中没有重现错误。 它工作正常
您的用户名和密码是否包含任何非字母数字字符? 类似的问题过去曾出现在处理诸如 : in passwords 之类的字符时
另外,mongoose 和 mongodb 是什么版本?
MongoDB'v3'
不,没有非字母数字符号。
嗯,用户定义在哪个数据库上? MongoDB 用户的范围仅限于 dbs,即使他们具有跨数据库权限,因此,如果您拥有的用户未在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 ,是的,它有帮助! 非常感谢!
我已经使用 node.js 连接到 cloud.mongodb.com,但我不明白为什么以及如何成功建立 2 个连接,但其他时候连接不成功。
在控制台我看到
不推荐使用 server/replset/mongos 选项,它们的所有选项都在选项对象的顶层支持 [poolSize,ssl,sslValidate,sslCA,sslCert,sslKey,sslPass,sslCRL,autoReconnect,noDelay,keepAlive,connectTimeoutMS,fa
mily,socketTimeoutMS,reconnectTries,reconnectInterval,ha,haInterval,replicaSet,secondaryAcceptableLatencyMS,acceptableLatencyMS,connectWithNoPrimary,authSource,w,wtimeout,j,forceServerObjectId,serializeFunctions,ignoreUndefined,raw,bu
fferMaxEntries,readPreference,pkFactory,promiseLibrary,readConcern,maxStalenessSeconds,loggerLevel,logger,promoteValues,promoteBuffers,promoteLongs,domainsEnabled,keepAliveInitialDelay,checkServerIdentity,validateOptions,appname,auth]
(节点:3268)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):MongoError:身份验证失败
(节点:3268)弃用警告:不推荐使用未处理的承诺拒绝。 将来,未处理的承诺拒绝将以非零退出代码终止 Node.js 进程。
我试过了,但是不行
猫鼬 v4.5.3
mongodb v3.4.7
错误消息:
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
到 db url 的末尾
mongoose.connect('mongodb://user:password@host/yourDB?authSource=yourDB&w=1')
这对我有用。 &w=1
很重要
只需将
?authSource=yourDB&w=1
到 db url 的末尾
mongoose.connect('mongodb://user:password@host/yourDB?authSource=yourDB&w=1')
这对我有用。&w=1
很重要
谢谢你,先生。 :3 很好的答案
最有用的评论
嗯,用户定义在哪个数据库上? MongoDB 用户的范围仅限于 dbs,即使他们具有跨数据库权限,因此,如果您拥有的用户未在
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')