错误消息:MongoError:错误的身份验证身份验证失败通过URI字符串

时间:2019-04-15 18:49:25

标签: node.js mongodb mongoose

MongoDB和Node.js的新手。我试图通过mongo给我的连接字符串连接到我的mongoDB服务器:

  

“ mongodb + srv:// david:password@cluster0-re3gq.mongodb.net/test?retryWrites = true”

在我的代码中,我这样通过猫鼬调用连接(显然输入了密码):

const mongoose = require('mongoose');
const db = 'mongodb+srv://david:<password>@cluster0-re3gq.mongodb.net/test?retryWrites=true'
mongoose
    .connect(db, { 
        useNewUrlParser: true,
        useCreateIndex: true
      })
    .then(() => console.log('MongoDB connected...'))
    .catch(err => console.log(err));

运行代码时,出现以下错误

  

“ MongoError:错误的身份验证失败。”

关于这意味着什么的任何想法?谢谢!

23 个答案:

答案 0 :(得分:8)

效果很好! ?

请勿在URI中使用凭据,而应像这样使用

mongoose.connect(mongodb+srv://@clusterAnything.mongodb.net/test?retryWrites=true&w=majority, { user: process.env.MONGO_USER, pass: process.env.MONGO_PASSWORD, useNewUrlParser: true, useUnifiedTopology: true })

答案 1 :(得分:3)

我遇到了同样的问题,就我而言,答案很简单,就像删除<password>周围的尖括号“ <”和“>”一样。我一直在尝试:my_login_id:<my_password>,应该是my_login_id:my_password

答案 2 :(得分:2)

我认为您对mongodb帐户密码和用户密码感到困惑。 您应该使用用户密码,而不是帐户密码。 这就是我的理由。

答案 3 :(得分:2)

发生这种情况是因为输入的密码错误。因为您输入的是登录密码而不是集群密码。

解决方案===> 步骤1.在mongodb地图集页面的左侧导航中,单击“数据库访问”。

步骤2.选择您的用户名,然后单击以从右侧进行编辑。

步骤3.单击以更改密码。

步骤4.单击更新用户。

在更改密码期间,请仅按字母顺序输入密码,因为特殊字符需要编码。 See The Image For Your Better Understanding

现在就可以连接。

快乐编码。

答案 4 :(得分:2)

要遵循的清单:

1)确保使用正确的密码(数据库用户密码而不是Mongo帐户)。

2)输入密码时,请确保所有特殊字符都经过URL编码(例如:p@ssword应该为p%40ssword)。

3)如果您忘记了数据库用户的密码,请转到数据库访问(如果使用的是Mongo Atlas)->选择数据库用户->编辑->创建新密码-> 不要忘了更新,请单击“更新用户”

(!)安全警告:请勿在代码内以纯文本形式写密码-请遵循here给出的建议。

答案 5 :(得分:1)

就我而言,有左右字符

喜欢这个

<Password>

所以改为

Password

现在应用正在运行...

答案 6 :(得分:1)

我刚刚知道我使用了正确的用户名、密码和 DBname 时遇到了这个问题。

我尝试更改 db 用户的密码以进行仔细检查,但仍然无效。

然后我创建了一个新用户,赋予用户管理员角色,设置密码等,然后使用该新用户和密码(相同的 dbname)进行连接并且它工作正常。

我不知道到底是什么问题,但希望它可以帮助你们中的一些人节省一些时间:)

答案 7 :(得分:1)

不仅仅是密码

检查所有字段,它可能是用户或数据库的密码。如果您拼错了其中任何一个,则会出现身份验证错误。
转到安全下左侧窗格中的数据库访问: enter image description here

如果使用 edit 按钮更改密码。假设您的密码是:P@sW0rd 您可以使用数据库用户屏幕中包含的信息编译 URL:

client = MongoClient("mongodb+srv://giac:P@sW0rd@cluster0.wjdtk.mongodb.net/testc?retryWrites=true&w=majority")

其他答案并没有说即使您拼错了数据库名称也会出现身份验证错误。

答案 8 :(得分:0)

对我来说,结果是,我必须从 MongoDB Atlas 页面上的密码字段中退出。点击“更新用户”之前

答案 9 :(得分:0)

您是否在<password>处写密码?如果不是,一个好的做法是在操作系统上创建一个环境变量,然后使用process.env。[您的变量]进行调用。例如:

const password = process.env.YOURPASSWORDVARIABLE
const db = 'mongodb+srv://david:'+password+'@cluster0-re3gq.mongodb.net/test?retryWrites=true'

更好的是,您还可以将整个url连接字符串放在env变量中:

答案 10 :(得分:0)

mongodb+srv://david:password@cluster0-re3gq.mongodb.net/test?retryWrites=true

  • 将“password”替换为您为指定用户名注册的密码。
  • 将 net 之后的“test”替换为您在集合中创建的数据库的名称。

答案 11 :(得分:0)

更改密码对我有用

nB:不是图集密码

答案 12 :(得分:0)

添加到上述答案中,问题似乎与我输入错误的数据库密码有关,因为我从 Atlas 菜单中读取的当前密码和 MongoDB Atlas 真正保存为我当前密码的内容失真。< /p>

在选择新密码时使用“复制”按钮似乎存在“错误”。

帮助我的是以下几点:

  • 在网络中打开 Atlas
  • 转到“数据库访问”
  • 点击数据库用户上的“编辑”
  • 选择“密码”作为身份验证方法
  • 点击“编辑密码”
  • 点击密码字段中的“显示”
  • 点击“自动生成安全密码”
  • 不要按“复制”按钮进行复制,而是使用鼠标手动选择并通过鼠标右键单击或键盘命令复制文本
  • 点击下方的“更新用户”

那么: 查看数据库用户列表,确保没有其他数据库用户使用您刚生成的相同密码。

现在使用此连接字符串再次尝试您的用户名/密码组合(去掉占位符“$”和“[]”:

'mongodb+srv://$[username]:$[password]@$[hostlist]/$[database]?retryWrites=true'


我注意到当我通过单击然后单击“复制”按钮自动生成新密码时,自动生成的密码已重置为旧密码。因此,我假设新的自动生成的密码是正确的,但实际上它是我的旧密码,而且与另一个数据库用户的密码相同。在我单击密码输入字段上的“显示”之前,我无法理解这一点。

也许这会有所帮助!

答案 13 :(得分:0)

就我而言,通过直接设置密码变量解决了上述错误。

DATABASE = "test"
#PASSWORD = os.environ.get("YOUR_PASSWORD") #This line was causing an error in code
PASSWORD = "YOUR_PASSWORD"                  # I added directly password variable

client = connect(
    DATABASE,
    host=f"mongodb+srv://mano:{PASSWORD}@cluster0.e2arj.mongodb.net/?retryWrites=true&w=majority",
    alias="default",
)

答案 14 :(得分:0)

在生成并复制密码后,我忘记了更新用户,并且想知道为什么密码不起作用。稍后我看到了更新按钮。我之前不可见。大声笑。解决了这个问题。

数据库访问=>编辑用户=>生成/复制密码=>更新它! 它对我有用。

请记住以确保您已更新它。

答案 15 :(得分:0)

您也可以通过以下方法摆脱此错误:创建新的数据库用户,方法是从左侧转到“数据库访问”,然后从右侧转到“添加新数据库用户”。 现在创建一个新的用户名和密码,单击“确定”。现在,将这个新的用户名和密码替换为MongoUri。

答案 16 :(得分:0)

我遇到了类似的问题,很奇怪,当我在数据库访问中创建新用户时,它得到解决。这次虽然我单击了自动生成密码。没关系,但就我而言,它解决了问题。

答案 17 :(得分:0)

只需从密码两侧取下天使括号

const db ='mongodb + srv:// username: <password> @ cluster0-re3gq.mongodb.net / test?retryWrites = true' ----- ->错误

const db ='mongodb + srv:// username: password @ cluster0-re3gq.mongodb.net / test?retryWrites = true' ----- ->正确

答案 18 :(得分:0)

最后,对于我来说,使用该连接字符串的等级比NodeJs版本(2.2.12或更高版本)群集URL的等级低。然后,确保您必须将Atlas MongoDB中的当前IP地址白名单。它应该在Atlas MongoDB的“网络访问”部分显示为0.0.0.0/0(包括您当前的IP地址)。 Connect to cluster NodeJs version 2.2.12 or later

主要问题是我将连接字符串网址存储在该部分的常量中。因此,最初,我将连接字符串值存储在单引号/双引号中,但是每次遇到身份验证失败错误时,因为它无法从Atlas mongoDB解析该“ Password”值。所以我用反引号(``)代替了单引号/双引号来存储该连接字符串。

我通过NodeJs应用程序连接mongoDB Atlas的示例代码。

const DB_USER = 'your username in atlas mongodb';

const PASSWORD = encodeURIComponent('your password in atlas mongodb');

const url = `mongodb://${DB_USER}:${PASSWORD}@cluster0-shard-00-00.3ytbz.mongodb.net:27017,cluster0-shard-00-01.3ytbz.mongodb.net:27017,cluster0-shard-00-02.3ytbz.mongodb.net:27017/sample-db?ssl=true&replicaSet=atlas-z26ao5-shard-0&authSource=admin&retryWrites=true&w=majority`;

mongoose.connect(url,
  {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    useFindAndModify: true
  })
  .then(() => {
    console.log('Connected to database !!');
  })
  .catch((err)=>{
    console.log('Connection failed !!'+ err.message);
  });

答案 19 :(得分:0)

mongodb+srv://jehat123:<password>@jehatarmancdeniz-x2yf7.mongodb.net/question-answer?retryWrites=true&w=majority

删除所有密码部分

像这样使用:

mongodb+srv://jehat123:yourpass@jehatarmancdeniz-x2yf7.mongodb.net/question-answer?retryWrites=true&w=majority

答案 20 :(得分:0)

在我的情况下,我的密码错误,要诊断该错误,我已按照以下步骤操作:

我必须尝试通过命令行连接: enter image description here

点击以下命令:mongo“ mongodb + srv://cluster0-j8ods.mongodb.net/test”-用户名:

enter image description here

再次响应:2020-04-26T11:48:27.641-0500 E查询[js]错误:错误的身份验证身份验证失败。 :

然后,我要更改我的用户(以我的情况为root用户)的密码。就是这样,我被授权

答案 21 :(得分:0)

我遇到的mongoDB密码身份验证失败了。

“错误:错误的身份验证失败。”

按照上面给出的Pawan的建议,我用数据库密码替换了MONGO_URI链接中的登录密码,并且可以正常工作。一定还要检查一下。

如果您没有生成generate new,或者如果您是较早创建的,则替换为new。

答案 22 :(得分:-1)

检查您的密码和数据库名称是否正确

相关问题