【问题标题】:How to replace password in MongoDB connection string with stars - JavaScript?如何用星号替换 MongoDB 连接字符串中的密码 - JavaScript?
【发布时间】:2018-01-08 19:44:51
【问题描述】:

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

mongodb://john:pwd897@some_url:234/database_name

应该是

mongodb://john:***@some_url:234/database_name

我正在尝试使用正则表达式来解析它:

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

看来我需要更换 4 美元。但我不知道该怎么做。原因之一是字符串的某些部分可能不存在,包括密码本身。

【问题讨论】:

  • 这不会产生错误的密码错误吗?
  • @SterlingArcher 不知道为什么?

标签: javascript regex mongodb


【解决方案1】:

已编辑,因此可以使用包含 : 的密码:

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

【讨论】:

  • 看起来有效!谢谢!如果我也想用星号更改用户名怎么办?我将如何更改代码?
  • 如果密码中包含:怎么办?
  • @ctwheels:已编辑,因此可以使用包含 : 的密码,感谢您指出这一点!
  • @FlashThunder 好多了 +1
  • 连接字符串中的密码不能在开放形式中包含符号:,它违反了URL Connection String Spec。符号: 必须编码为%3A
【解决方案2】:

Generic 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多