gpt4 book ai didi

node.js - Node : How do I store data in an express session, 以便我可以从 socket.io 访问它?

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:36 24 4
gpt4 key购买 nike

因此,出于学习目的,我正在使用 Node 和 Express 编写一个聊天应用程序。我使用 MongoDB/Mongoose、Passport 进行身份验证,使用 socket.io 进行应用程序的实际聊天部分。

我有一个有效的注册/登录/注销系统。我的问题出在socket.io 代码中。当我从客户端发出消息时,我想在服务器端代码中知道该消息来自哪个用户。因此,以 PHP 为例,我会在登录时将用户名保存在 session 变量中,然后在其他地方使用它。所以我尝试在这里做类似的事情:

router.post('/',
passport.authenticate('local',{ failureRedirect: '/login', failureFlash: true }),
function(req, res) {
User.findOneAndUpdate({_id: req.user._id}, { lastConnection: new Date() }, {} ,function (err, user) {
req.flash('welcomeMessage', 'Welcome ' + user.name + '!');
req.session.user=user.name; //Here I try saving the user name
req.session.cookie.user=user.name; //Same here, for testing purposes
res.redirect('/');
});
});

但是我如何从socket.io 中访问这些数据呢?在另一个 Stackoverflow 问题中,有人提供了以下代码,用于将 Express session 公开给 socket.io:

io.use(function(socket, next) {
var req = socket.handshake;
var res = {};
cookieParser(req, res, function(err) {
if (err) return next(err);
session(req, res, next);
});
});

这允许我访问 session :

io.sockets.on('connection', function (socket) {
//Express session:
console.log("Session: ", socket.handshake.session);

这给了我这个输出:

Session: {cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true
}
}

这不包含添加的数据。我的猜测是,这是我的应用程序启动时的 session ,在我执行登录之前,因此在将任何数据添加到 session 之前。

不幸的是,我不知道如何继续。我很感激任何建议:)

最佳答案

在 session 初始化中将默认的 httpOnly: false 设置更改为 true。

因为,它是严格的 httpOnly,它拒绝 AJAX 请求。

在您初始化 session 的 app.js 或 server.js 中执行类似的操作。


var session = ExpressSession({
secret :' secret key ',
key: 'express.sid',
重新保存:假,
保存未初始化:true,
cookie: {httpOnly: false}
});



注意: cookie: { httpOnly: false } 很重要,其余代码为例。

谢谢。

关于node.js - Node : How do I store data in an express session, 以便我可以从 socket.io 访问它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28385830/

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