向 MongoDB 写入会话时出错

Posted

技术标签:

【中文标题】向 MongoDB 写入会话时出错【英文标题】:error writing session to MongoDB 【发布时间】:2017-01-21 17:52:50 【问题描述】:

我正在开发一个节点应用程序并使用 MongoDB 来存储会话。该应用使用 Linkedin oAuth 和 MongoDB。

我的代码:

var store = new MongoDBStore(
    uri: mongoUri,
    collection: '_sessions',
    function(err) 
        console.log(err);
    
);

// Catch MONGO CONNECTION errors
store.on('error', function(error) 
    assert.ifError(error);
    assert.ok(false);
);

// if (isLocal) 
//     app.use(session(resave: 'true', saveUninitialized: 'true', secret: 'keyboardcat'));
// else
// 
app.use(session(
    store: store,
    resave: 'true',
    saveUninitialized: 'true',
    secret: process.env.SESSION_SECRET,
    cookie: 
        maxAge: 1000 * 60 * 60 * 24 * 7
    
));

应用启动时出现以下错误。

Error: Error setting ZwkuhpnbkYgD1HzscBJ8w2fmhwZpiQPL to Session 
  cookie: 
    path: '/',
     _expires: 2016-09-20T22:20:15.753Z,
     originalMaxAge: 604800000,
     httpOnly: true,
     secure: null,
     domain: null ,
  passport: ,
  'oauth2:www.linkedin.com':  state: 'DqyHf7eqG8RCN7BYRkG9NSUV'  : The dotted field 'oauth2:www.linkedin.com' in 'session.oauth2:www.linkedin.com' is not valid for storage.
    at /Users/vc/Sites/HavasCognitiveID/node_modules/connect-mongodb-session/index.js:147:19
    at handleCallback (/Users/vc/Sites/HavasCognitiveID/node_modules/connect-mongodb-session/node_modules/mongodb/lib/utils.js:96:12)
    at /Users/vc/Sites/HavasCognitiveID/node_modules/connect-mongodb-session/node_modules/mongodb/lib/collection.js:1008:42
    at handler (/Users/vc/Sites/HavasCognitiveID/node_modules/mongodb-core/lib/topologies/replset.js:414:5)[nodemon] restarting due to changes...

我了解 mongodb 抱怨虚线字段。我的问题是如何在用户通过身份验证后将其写入护照之前拦截会话:?

【问题讨论】:

【参考方案1】:

您可以通过在定义 LinkedIn 策略时将其添加为选项来覆盖使用的“sessionKey”

passport.use(new LinkedinStrategy( ...options, sessionKey: 'linkedin', strategy.linkedin));

【讨论】:

以上是关于向 MongoDB 写入会话时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MongoDB + NodeJS Express 向 ReactJS React Router 和 Redux 添加登录身份验证和会话?

尝试写入 MongoDB 副本集的 PHP 错误

在MongoDB 3.6之前阅读您自己的写入一致性

如何在不同的机器上连接流星和 mongoDB

MongoDB,网上没有关于事务和读操作交互的信息

使用 MongoDB 命令时出错