SOCKET.IO:从开发工具访问 cookie。 Express-session

SOCKET.IO: Access cookies from devtools. Express-session

为什么我不能访问这个 cookie?

当用户登录时收到 cookie 并将其发送回 Express 服务器。

当向 Socket.io 服务器初始化一个新的 websocket 时,这个 cookie 没有被发送,所以我试图通过 document.cookie 获取它。但是,它不起作用,因为 cookie 不可修改。

这是一个 HttpOnly cookie,无法通过 client-side Javascript 访问。

换句话说:服务器 能够读取和操作 cookie。 客户端 接收它并盲目地将其随每个后续请求发回,无法读取或操作其内容,至少不能使用 Javascript 手段。

官方网站做了一些对我不起作用的事情。 express session middleware

const session = require("express-session");

io.use(wrap(session({ secret: "cats" })));

io.on("connection", (socket) => {
  const session = socket.request.session;
});

所以,我通过以下方式解决了这个问题: 逻辑:

Before establishing websocket, request credentials to express endpoint "/userCredentials"
and then use these credentials to establish the connection

警告:下面的代码被删除了,因为我做了太多的授权逻辑

CLIENT: 
...
useEffect(() => {
  (async() => {
    const pending_creds = await fetch("/userCredentials");
    const creds = pending_creds.json();
    
    const ws = io({auth: {creds}})
    
    setSocket(ws)
  })()
}, [])

...

SERVER:


...
app.get("/userCredentials", (req,res) => {
  const userSession = req.session.user;
  
  res.json(userSession)
})
...

io.use(socket, next){
  const creds = socket.handshake.auth.userSession;
  if(creds){
    next()
  } else {
    socket.disconnect()
  }
}