将帐户分配给网络套接字连接
Assigning account to a web socket connection
我正在构建一个可以玩纸牌游戏的网站,我需要确保网络套接字连接来自用户。我正在使用 express-session、connect-mongo、express 和 ws 包,但在获取 session 时遇到问题。
升级时解析 session
server.on('upgrade', function (request, socket, head) {
console.log('Parsing session from request...');
session(request, {}, () => {
console.log('Session is parsed!');
wss.server.handleUpgrade(request, socket, head, function (ws) {
wss.server.emit('connection', ws, request);
});
});
});
express-session
module.exports = session({
secret: "HOPEFULLY-NO-ONE-FINDS-THIS!!!!",
store: new MongoStore({ mongooseConnection: mongoose.db }),
cookie: { secure: false }
})
正在创建 ws 服务器
var wss = new WebSocket.Server({ noServer: true });
保存到 session
router.post('/login', function(req, res, next) {
const { username, password } = req.body;
user.authUser(username, password, (err, user) =>{
if (err) return res.send("Error on login!");
req.session.user = user;
res.redirect("/")
});
});
在客户端,我使用简单的
new WebSocket('ws://localhost:3000');
连接到我的 ws 服务器
此代码几乎是从 here 复制而来的,但它对我不起作用。当我尝试像这样记录 session
wss.on('connection', function connection(ws, req) {
console.log(req.session);
}
我只得到
Session {
cookie: {
path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true,
secure: false
}
}
我几乎被困在这里了。这甚至是正确的方法吗?提前致谢!
所以浏览器只会在域与当前网站相同时使用 websocket 握手发送 cookie。我虽然这对我来说不是问题,但事实证明 localhost 和 127.0.0.1 不是一回事。将 new WebSocket('ws://localhost:3000');
变成 new WebSocket('ws://127.0.0.1:3000');
可以解决问题。
我正在构建一个可以玩纸牌游戏的网站,我需要确保网络套接字连接来自用户。我正在使用 express-session、connect-mongo、express 和 ws 包,但在获取 session 时遇到问题。
升级时解析 session
server.on('upgrade', function (request, socket, head) {
console.log('Parsing session from request...');
session(request, {}, () => {
console.log('Session is parsed!');
wss.server.handleUpgrade(request, socket, head, function (ws) {
wss.server.emit('connection', ws, request);
});
});
});
express-session
module.exports = session({
secret: "HOPEFULLY-NO-ONE-FINDS-THIS!!!!",
store: new MongoStore({ mongooseConnection: mongoose.db }),
cookie: { secure: false }
})
正在创建 ws 服务器
var wss = new WebSocket.Server({ noServer: true });
保存到 session
router.post('/login', function(req, res, next) {
const { username, password } = req.body;
user.authUser(username, password, (err, user) =>{
if (err) return res.send("Error on login!");
req.session.user = user;
res.redirect("/")
});
});
在客户端,我使用简单的 new WebSocket('ws://localhost:3000');
此代码几乎是从 here 复制而来的,但它对我不起作用。当我尝试像这样记录 session
wss.on('connection', function connection(ws, req) {
console.log(req.session);
}
我只得到
Session {
cookie: {
path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true,
secure: false
}
}
我几乎被困在这里了。这甚至是正确的方法吗?提前致谢!
所以浏览器只会在域与当前网站相同时使用 websocket 握手发送 cookie。我虽然这对我来说不是问题,但事实证明 localhost 和 127.0.0.1 不是一回事。将 new WebSocket('ws://localhost:3000');
变成 new WebSocket('ws://127.0.0.1:3000');
可以解决问题。