如何使用 `connect-mongo` 连接到 TLS/SSL 上的 `mongos` 实例用于 `express-session`?
How to connect to a `mongos` instance over TLS/SSL using `connect-mongo` for `express-session`?
我使用 connect-mongo
as the storage module for express-session
,一切正常,直到我从 Compose.io
切换到新的 'MongoDB+' TLS/SSL
部署,现在我无法连接。
我不太了解他们的架构,但可以在这里找到更多信息:
Bringing SSL To Compose MongoDB
这里:
Going SSL With Compose MongoDB+
这里:
One Missing Key and How It Broke Node.js
我知道当你连接时你需要声明 mongos
选项并且你的连接代码最终看起来像这样:
var fs = require('fs');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var ca = [fs.readFileSync('./Mongo-Key.pem')];
var url = 'mongodb://MY_MONGO_USER:MY_MONGO_PASS@mongos1.compose.io:12345,mongos2.compose.io:54321/Sessions';
app.use(session({
key : 'SessionKey',
secret : 'CATONTHEKEYBOARD',
cookie : {
path : '/',
httpOnly : true,
maxAge : null
},
store : new MongoStore({
url : url,
mongoOptions : {
mongos : {
ssl : true,
sslValidate : true,
sslCA : ca,
ca : ca,
poolSize : 1,
reconnectTries : 1
}
},
collection : 'sessions',
stringify : false
}, function(result) {
console.log('Connected to sessions db!');
return next();
})
}));
该连接字符串以及那些连接选项使用 mongo-native
驱动程序工作。我可以连接并执行所有操作。
但是在这种情况下应用它们不会产生……任何结果。它只是挂起。
知道如何生成 any 输出以进一步调试吗?
感谢您的帮助!
好吧,事实证明 connect-mongo
在更新的版本中删除了第二个参数(我试图用作回调的那个)。所以问题是我的回调从未被调用过。
像下面这样调整代码是有效的:
var fs = require('fs');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var ca = [fs.readFileSync('./Mongo-Key.pem')];
var url = 'mongodb://MY_MONGO_USER:MY_MONGO_PASS@mongos1.compose.io:12345,mongos2.compose.io:54321/Sessions';
app.use(session({
key : 'SessionKey',
secret : 'CATONTHEKEYBOARD',
cookie : {
path : '/',
httpOnly : true,
maxAge : null
},
store : new MongoStore({
url : url,
mongoOptions : {
mongos : {
ssl : true,
sslValidate : true,
sslCA : ca,
ca : ca,
poolSize : 1,
reconnectTries : 1
}
},
collection : 'sessions',
stringify : false
}).on('connected', function(result) {
console.log('Connected to sessions db!');
return next();
})
}));
我使用 connect-mongo
as the storage module for express-session
,一切正常,直到我从 Compose.io
切换到新的 'MongoDB+' TLS/SSL
部署,现在我无法连接。
我不太了解他们的架构,但可以在这里找到更多信息: Bringing SSL To Compose MongoDB
这里: Going SSL With Compose MongoDB+
这里: One Missing Key and How It Broke Node.js
我知道当你连接时你需要声明 mongos
选项并且你的连接代码最终看起来像这样:
var fs = require('fs');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var ca = [fs.readFileSync('./Mongo-Key.pem')];
var url = 'mongodb://MY_MONGO_USER:MY_MONGO_PASS@mongos1.compose.io:12345,mongos2.compose.io:54321/Sessions';
app.use(session({
key : 'SessionKey',
secret : 'CATONTHEKEYBOARD',
cookie : {
path : '/',
httpOnly : true,
maxAge : null
},
store : new MongoStore({
url : url,
mongoOptions : {
mongos : {
ssl : true,
sslValidate : true,
sslCA : ca,
ca : ca,
poolSize : 1,
reconnectTries : 1
}
},
collection : 'sessions',
stringify : false
}, function(result) {
console.log('Connected to sessions db!');
return next();
})
}));
该连接字符串以及那些连接选项使用 mongo-native
驱动程序工作。我可以连接并执行所有操作。
但是在这种情况下应用它们不会产生……任何结果。它只是挂起。
知道如何生成 any 输出以进一步调试吗?
感谢您的帮助!
好吧,事实证明 connect-mongo
在更新的版本中删除了第二个参数(我试图用作回调的那个)。所以问题是我的回调从未被调用过。
像下面这样调整代码是有效的:
var fs = require('fs');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var ca = [fs.readFileSync('./Mongo-Key.pem')];
var url = 'mongodb://MY_MONGO_USER:MY_MONGO_PASS@mongos1.compose.io:12345,mongos2.compose.io:54321/Sessions';
app.use(session({
key : 'SessionKey',
secret : 'CATONTHEKEYBOARD',
cookie : {
path : '/',
httpOnly : true,
maxAge : null
},
store : new MongoStore({
url : url,
mongoOptions : {
mongos : {
ssl : true,
sslValidate : true,
sslCA : ca,
ca : ca,
poolSize : 1,
reconnectTries : 1
}
},
collection : 'sessions',
stringify : false
}).on('connected', function(result) {
console.log('Connected to sessions db!');
return next();
})
}));