it-swarm.cn

带有“@”的MongoDB的密码

我正在尝试使用Node.js中的Mongoose使用用户名和密码连接到MongoDB数据库。所有文档都说连接字符串应该是这样的

  mongodb://username:[email protected]:port/db

但是,密码中包含“@”字符。我怎么能用这个猫鼬能理解的连接字符串?我可以在密码中转义'@',还是有另一种连接方法我必须使用?

67
iZ.

使用此语法,不要忘记uri_decode_auth选项。

mongoClient.connect("mongodb://username:p%[email protected]:port/dbname", { 
    uri_decode_auth: true 
    }, function(err, db) {

    }
);
82
Andrey Hohutkin

使用 mongoose.connect call的options参数指定密码,而不是将其包含在URL字符串中:

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pass: '[email protected]'},
                 callback);
25
JohnnyHK

如果您的密码有特殊字符:

const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`;
23
vanduc1102

我也面临同样的问题。我通过在连接字符串中添加编码密码来解决。而且效果很好。

(1)从 https://www.url-encode-decode.com编码您的密码
(2)用编码密码替换密码。
(3)它应该运作良好。

例如:
实际密码:ABCDEX $ KrrpvDzRTy` @ drf。'; 3X
编码密码:ABCDEX%24KrrpvDzRTy%60%40drf。%27%3B3X

mongodb的:// USER1:ABCDEX%24KprpvDzRTy%60%40drf.%27%[email protected]:1234,ds1234-test.com:19889 /蒙戈-dev的replicaSet = RS-ds123546978&SSL =真”,

5
prisan

使用pwd代替pass,这对我来说适用于版本3.2

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pwd: '[email protected]'},
                 callback);
4
AKASH

上面提到的解决方案都不适合我。我进一步研究了它,发现我必须包含useNewUrlParser参数。

mongoose.connect(db, {
    useNewUrlParser : true
    },
    err => {
    if (err){
        console.error('Error: ' + err)
    }
    else{
        console.log('Connected to MongoDb')
    }
})

据我所知,您需要一个特定版本的MongoDB才能使用它。有关更多详细信息,请检查 通过将useNewUrlParser设置为true来避免“当前URL字符串解析器已弃用”警告

它是摆脱警告但显然版本也影响所需的参数。

我还没有测试过所有特殊字符,但它肯定适用于'@#$'。

希望这可以帮助。

3
Thierry

如果您使用Mongodb本机Node.js驱动程序,这对于3.1驱动程序版本适用于我。假设您的网址不包含身份验证信息。

MongoClient = require('mongodb').MongoClient;
let options = {
    useNewUrlParser: true,
    auth: {
        user: 'your_usr',
        password: 'your_pwd'
    }
};
MongoClient.connect(url, options, callback);

或者,如果您想在网址中包含身份验证信息,请执行以下操作:

let url = "mongodb://username:" + encodeURIComponent("[email protected]") + "@localhost:27017/database"
2
toadead

试试这个吧,我的朋友们:

    mongoose.connect("mongodb://localhost:27017/test?authSource=admin",
                     {user: 'viettd', pass: '[email protected]'});

test是我的数据库名称
admin是我的身份验证数据库
viettd是我的用户名
[email protected]是我的密码

2
Viet Tran

有时您需要使用其他 工具连接到数据库 只接受字符串作为连接字符串。所以只需用%40更改@符号即可

1
dang

对于那些与Mongo Compass连接的人。( MacOSx )只需转到你的 cluster - > 安全 (Tab)mongodb.com

Cluster-Security 

然后

编辑 您的密码(按用户名上的编辑按钮): enter image description here 

您将获得一个模态/弹出/对话框:按下您的名字下方的编辑密码(默认情况下该按钮显示为灰色但显示在您的名称下方) - >然后按 更新用户

EditPassword in Dialog Popup 

下一步

如果正在运行,请关闭你的mongo db指南针应用程序:(退出Mongo)

Quit Mongo Compass 

下一步:

返回mongodb.com中的Overview选项卡。选择 Connect

返回OverView: return to overview and select connect 

下一步:

在弹出的对话框中选择 用MongoDB Compass连接 然后在下一个视图中选择你想要使用的版本(最好是 VersionNumber之前 ): Connect with MongoDB Compass 

select Version 

然后:

复制 / URI字符串 呈现给您:

Copy Uri String 

重新打开MongoDB Compass应用程序:

并且它将为您提供选项/弹出窗口以使用检测到的URI字符串:单击uri string detected 

最后一步:

输入新密码和 连接 。现在您的连接现在应该成功.  Enter new password and Connect 

0
RileyManda
Also, if your password contains a percentage, %, 
 Because the percent ("%") character serves as the indicator for percent-encoded octets, it must be percent-encoded as "%25" for that octet to be used as data within a URI

for example, if your password is John%Doe, the new transformed password will be John%25Doe or
If password is Paul%20Wait, New Password will be Paul%2520Wait

mongoClient.connect("mongodb://username:John%[email protected]:port/dbname", function(err, db) {
// password is John%Doe
    }`enter code here`
);
0
Oduwole Oluwasegun

这个解决方案需要额外的依赖,但它最终对我有用。

mongodb-uri添加到您的项目中,并将以下行添加到您的代码中:

const mongoose = require('mongoose')
const mongodbUri = require('mongodb-uri')
let mongooseUri = mongodbUri.formatMongoose(config.mongo.uri)
mongoose.connect(mongooseUri, config.mongo.options)

我在mongoose的GitHub问题 #6044 中找到了这个建议。

0
lpacheco