带有"@"的MongoDB密码

iZ.*_*iZ. 76 mongoose mongodb node.js

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

  mongodb://username:password@host:port/db
Run Code Online (Sandbox Code Playgroud)

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

And*_*kin 92

使用此语法,不要忘记该__CODE__选项.

mongoClient.connect("mongodb://username:p%40ssword@host:port/dbname?authSource=admin", { 
        useNewUrlParser: true
    }, function(err, db) {

    }
);
Run Code Online (Sandbox Code Playgroud)

  • 这个答案应该得到更多的爱,它真的只是转换为@符号到%40就可以了. (5认同)
  • 从驱动程序版本3.1开始,不支持选项[uri_decode_auth] (5认同)
  • 我乍一看我错过了`{uri_decode_auth:true}`,但是一旦我注意到它就行了.谢谢. (4认同)

Joh*_*yHK 27

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

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pass: 'p@ssword'},
                 callback);
Run Code Online (Sandbox Code Playgroud)


van*_*102 27

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

const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`;
Run Code Online (Sandbox Code Playgroud)

  • 这个答案应该得到更多的喜爱,因为它解决了整个问题,而不仅仅是OP的非常具体的用例。 (4认同)

Vie*_*ran 5

试试这个,我的朋友:

    mongoose.connect("mongodb://localhost:27017/test?authSource=admin",
                     {user: 'viettd', pass: 'abc@123'});
Run Code Online (Sandbox Code Playgroud)

test是我的数据库名称
admin是我的身份验证数据库
viettd是我的用户名
abc@123是我的密码


AKA*_*ASH 5

使用 pwd 代替 pass,这对我的 version3.2 有用

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pwd: 'p@ssword'},
                 callback);
Run Code Online (Sandbox Code Playgroud)


pri*_*san 5

我也面临同样的问题。我已经解决了将编码后的密码添加到连接字符串中的问题。而且效果很好。

(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%3B3X@dstest.com:1234,ds1234-test.com:19889 / mongo-dev?replicaSet = rs-ds123546978&ssl = true',


toa*_*ead 5

如果您使用 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);
Run Code Online (Sandbox Code Playgroud)

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

let url = "mongodb://username:" + encodeURIComponent("p@ssword") + "@localhost:27017/database"
Run Code Online (Sandbox Code Playgroud)