javascript - 无法使用具有 X509 用户的 Mongoose 连接到 Mongo DB

标签 javascript node.js mongodb mongoose node-modules

我正在为我的项目使用 nodeJS,并使用 mongoose 模块连接到 mongo 数据库。使用用户名/密码方法连接工作正常。但是,当更改为 X509 身份验证时,我无法连接到数据库。

连接到数据库时抛出错误 - "err":{"name":"MongoError","message":"auth failed","ok":0,"errmsg":"auth failed", “代码”:18}}

node version - v8.11.3
npm version  - 5.6.0
Mongo Db version - 3.4.14
mongoose version in package json - "^4.8.7" 

下面的代码片段,

var mongoose = require("mongoose");
mongoose.Promise = global.Promise
var connection = null;
var dbString = "mongodb://host1:10901,host2:1902/dbname?replicaSet=replset&readPreference=secondaryPreferred";
var fs = require('fs')

connection = mongoose.createConnection(dbString, {
    user: encodeURIComponent("C=US,ST=California,O=Company Inc.,OU=management:group.123456,CN=dbname-role-user-repl.mydomain.com"),
    auth: { authMechanism: "MONGODB-X509", authSource: '$external' },
    server: {
        ssl: true,
        sslValidate: true,
        sslCA: fs.readFileSync(path to CA file),
        sslCert: fs.readFileSync(path to cert file),
        sslKey: fs.readFileSync(path to kep file),
        sslPass: "password"
    }
});

connection.once("open", function () {
    console.log("App is connected to  DB -- " + dbString);
});
connection.once("close", function () {
    console.log("App disconnected from  DB -- " + dbString);
});
connection.on("error", function (err) {
    console.error("App failed to connect to  DB -- " + dbString, err);
});

module.exports = {
    connection: connection,
    mongoose: mongoose
}

有没有其他人遇到过类似的问题?

最佳答案

如果它对其他人有任何帮助,我找到了解决方法,下面是它的内容。

将 mongoose 更新到版本 5.2.5 并删除用户字符串上的编码(即 encodeURIComponent)解决了这个问题。

关于javascript - 无法使用具有 X509 用户的 Mongoose 连接到 Mongo DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51531523/

相关文章:

javascript - 检查 js 文件中的角色以启用或禁用菜单项

javascript - 查询对象。 "q"查询不起作用

mongodb - mongodb是否具有关系型数据库中的trigger、procedure等属性?

mongodb - 如何在 MongoDB 中创建巨大的随机文档

javascript - 无需轮询的网页更新

javascript - Bootstrap + 词缀 : affixed menu jumps off screen

javascript - ChartJS - 从服务器端注入(inject)数据

javascript - 每个 DOM Node 的屏幕截图

mongodb - ElasticSearch 与其他存储结合的典型用法是什么?

javascript - Youtube:提高页面加载速度(Greasemonkey/jQuery)