gpt4 book ai didi

mongodb - Socket.io、Passport、MongoDB 和 Passport.socketio 在生产中损坏

转载 作者:可可西里 更新时间:2023-11-01 10:04:31 27 4
gpt4 key购买 nike

我构建了一个在socket.io上中继的nodejs应用程序,使用Passport和passport.socketio进行身份验证和授权,并使用mongodb和connect-mongo进行 session 存储。

它在我的笔记本电脑上运行良好,但当我迁移到云(Azure-VM)时,我开始遇到奇怪的错误。

05-02-2014, 11:47:06.500 监听端口 8081 (https)

/home/azureuser/myapp/node_modules/mongodb/lib/mongodb/connection/base.js:242
throw message;
^
Error: Error in session store:
Error: failed to deserialize user out of session
at Object.io.set.passportSocketIo.authorize.fail (/home/azureuser/myapp/lib/express/socketio.js:25:23)
at /home/azureuser/myapp/node_modules/passport.socketio/lib/index.js:48:21
at /home/azureuser/myapp/node_modules/connect-mongo/lib/connect-mongo.js:229:23
at /home/azureuser/myapp/node_modules/mongodb/lib/mongodb/collection/query.js:147:5
at Cursor.nextObject (/home/azureuser/myapp/node_modules/mongodb/lib/mongodb/cursor.js:733:5)
at commandHandler (/home/azureuser/myapp/node_modules/mongodb/lib/mongodb/cursor.js:713:14)
at /home/azureuser/myapp/node_modules/mongodb/lib/mongodb/db.js:1806:9
at Server.Base._callHandler (/home/azureuser/myapp/node_modules/mongodb/lib/mongodb/connection/base.js:442:41)
at /home/azureuser/myapp/node_modules/mongodb/lib/mongodb/connection/server.js:485:18
at MongoReply.parseBody (/home/azureuser/myapp/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5)

有什么想法从哪里开始吗?

最佳答案

好吧,我找到了,passport.socketio有它的依赖于Passport并且有它自己的“版本”的passport。这意味着在我的代码中,当我设置serializeUser/deserializeUser时,它只会影响我用于REST的 Passport :

passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(id, done) {
done(null, id);
});

虽然 Passport.socketio 默认情况下是这样的:

var defaults = {
passport: require('passport'),
key: 'connect.sid',
secret: null,
...
};

意味着不使用serializeUser/deserializeUser,这又会导致:

Error: failed to deserialize user out of session

解决方案非常简单,只需将用于 REST 的通行证传递给 Passport.socketio

io.set('authorization', passportSocketIo.authorize({
passport : passport,
cookieParser: express.cookieParser,
...
}));

关于mongodb - Socket.io、Passport、MongoDB 和 Passport.socketio 在生产中损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21576631/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com