Mongoose: MongoError:身份验证失败

创建于 2016-10-02  ·  10评论  ·  资料来源: Automattic/mongoose

我在 mongolab 中有 mongodb。
如果我通过命令连接到它

mongo uri/$db -u user -p pass

没关系。
如果我使用猫鼬并通过以下方式连接

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

我有错误

MongoError: Authentication failed

我用猫鼬4.6.1

needs clarification

最有用的评论

嗯,用户定义在哪个数据库上? 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')

所有10条评论

另外,我已经检查过 - 在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 个连接,但其他时候连接不成功。
image

在控制台我看到

不推荐使用 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 很好的答案

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

jeneser picture jeneser  ·  3评论

p3x-robot picture p3x-robot  ·  3评论

gustavomanolo picture gustavomanolo  ·  3评论

Igorpollo picture Igorpollo  ·  3评论

adamreisnz picture adamreisnz  ·  3评论