如何用星星替换MongoDB连接字符串中的密码 - JavaScript?

时间:2018-01-08 19:44:51

标签: javascript regex mongodb

我想用像***这样的星号替换MongoDB连接字符串中的密码。所以,改为

  

的mongodb://约翰:pwd897 @ SOME_URL:234 / DATABASE_NAME

应该是

  

的mongodb://约翰:*** @ SOME_URL:234 / DATABASE_NAME

我正在尝试使用regexp来解析它:

^(mongodb:(?:\/{2})?)((\w+?):(\w+?)@|:?@?)(\w+?):(\d+)\/(\w+?)$

看起来我需要更换4美元。但我无法弄清楚该怎么做。其中一个原因是字符串的某些部分可能不存在,包括密码本身。

3 个答案:

答案 0 :(得分:3)

已编辑,因此适用于包含:的密码:

var str = "mongodb://john:lal:ala@some_url:234/database_name";
str = str.replace(/\/\/([^:]+):(.*)@/,"//$1:***@");
console.log(str); // <- mongodb://john:***@some_url:234/database_name

要标记用户名和密码,您可以使用例如:

var str = "mongodb://john:lal:ala@some_url:234/database_name";
str = str.replace(/\/\/([^:]+):(.*)@/,"//***:***@");
console.log(str); // <- mongodb://***:***@some_url:234/database_name

或者只是:

var str = "mongodb://john:lal:ala@some_url:234/database_name";
str = str.replace(/\/\/.*@/,"//***:***@");
console.log(str); // <- mongodb://***:***@some_url:234/database_name

答案 1 :(得分:0)

通用模块connection-string自动处理所有此类情况。

将连接字符串解析为一个对象后:

const ConnectionString = require('connection-string');

const cs = new ConnectionString('mongodb://john:pwd897@some_url:234/database_name');

您可以生成一个新的连接字符串,可以选择对密码进行哈希处理:

cs.toString({passwordHash: true})
//=> mongodb://john:######@some_url:234/database_name

或者您可以指定要使用的自定义符号:

cs.toString({passwordHash: '*'})
//=> mongodb://john:******@some_url:234/database_name

请参见方法toString

答案 2 :(得分:-2)

你可以使用bcryptjs。

https://www.npmjs.com/package/bcryptjs

它只是加密密码并在必要时对其进行解码