与数据库的初始连接似乎可以通过以下方式进行身份验证:
mongoose.connect('mongodb://user:pass@localhost/traderdb/?authSource=admin', {
auth: {
authdb: "admin"
}
}, function(e) {
//other things
});
然而,在那之后,当我尝试创建一个新会话并对用户进行身份验证时,一切都崩溃了,在 mongo 日志中,我可以看到应用程序尝试使用traderdb
数据库而不是管理数据库对 mongodb 进行身份验证,即使我正确设置了 authSource并且它第一次使用相同的 URI 连接良好。
这是我初始化会话存储的地方。这被放置在调用的回调中mongoose.connect
。
app.use(session({
secret: 'secrettexthere',
saveUninitialized: true,
resave: true,
store: new MongoStore({
url: 'mongodb://user:pass@localhost/traderdb/?authSource=admin',
db: 'traderdb',
collection: 'sessions',
auto_reconnect: true
})
}));
应用程序启动时没有任何失败,mongo 日志确认连接已成功建立并通过 admin 数据库进行身份验证。然而,在那之后,当我尝试实际使用会话存储时,应用程序崩溃并出现错误Error: Error setting TTL index on collection : sessions
。在 mongo 服务器日志中,我可以看到我的应用程序尝试连接和身份验证,traderdb
而不是admin
作为身份验证源。