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:错误的身份验证失败。”
关于这意味着什么的任何想法?谢谢!
答案 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.单击更新用户。
在更改密码期间,请仅按字母顺序输入密码,因为特殊字符需要编码。
现在就可以连接。
快乐编码。
答案 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)
检查所有字段,它可能是用户或数据库的密码。如果您拼错了其中任何一个,则会出现身份验证错误。
转到安全下左侧窗格中的数据库访问:
如果使用 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
答案 11 :(得分:0)
更改密码对我有用
nB:不是图集密码
答案 12 :(得分:0)
添加到上述答案中,问题似乎与我输入错误的数据库密码有关,因为我从 Atlas 菜单中读取的当前密码和 MongoDB Atlas 真正保存为我当前密码的内容失真。< /p>
在选择新密码时使用“复制”按钮似乎存在“错误”。
帮助我的是以下几点:
那么: 查看数据库用户列表,确保没有其他数据库用户使用您刚生成的相同密码。
现在使用此连接字符串再次尝试您的用户名/密码组合(去掉占位符“$”和“[]”:
'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)
在我的情况下,我的密码错误,要诊断该错误,我已按照以下步骤操作:
点击以下命令:mongo“ mongodb + srv://cluster0-j8ods.mongodb.net/test”-用户名:
再次响应:2020-04-26T11:48:27.641-0500 E查询[js]错误:错误的身份验证身份验证失败。 :
然后,我要更改我的用户(以我的情况为root用户)的密码。就是这样,我被授权
答案 21 :(得分:0)
我遇到的mongoDB密码身份验证失败了。
“错误:错误的身份验证失败。”
按照上面给出的Pawan的建议,我用数据库密码替换了MONGO_URI链接中的登录密码,并且可以正常工作。一定还要检查一下。
如果您没有生成generate new,或者如果您是较早创建的,则替换为new。
答案 22 :(得分:-1)
检查您的密码和数据库名称是否正确