【问题标题】:Assigning account to a web socket connection将帐户分配给 Web 套接字连接
【发布时间】:2021-02-17 00:30:38
【问题描述】:

我正在建立一个网站,您可以在其中玩纸牌游戏,我需要确保网络套接字连接来自用户。我正在使用 express-session、connect-mongo、express 和 ws 包,但无法获取会话。

升级时解析会话

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);
    });
  });
});

快速会话

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 });

保存到会话

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 复制而来的,但它对我不起作用。当我尝试像这样记录会话时

wss.on('connection', function connection(ws, req) {
        console.log(req.session);
}

我只会得到

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

我几乎被困在这里。这甚至是正确的方法吗?提前致谢!

【问题讨论】:

    标签: javascript node.js express session ws


    【解决方案1】:

    因此,当域与当前网站相同时,浏览器仅发送带有 websocket 握手的 cookie。我虽然在我的情况下这不是问题,但事实证明 localhost 和 127.0.0.1 不是一回事。将 new WebSocket('ws://localhost:3000'); 转换为 new WebSocket('ws://127.0.0.1:3000'); 可以解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-04
      • 2014-05-28
      • 1970-01-01
      • 2012-03-03
      • 2019-07-04
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多