Closed
Description
Describe the bug
socket.request.session
is always a new session even after declaring req.session.user
with a value.
To Reproduce
Setup Socket.io with express-session
middleware.
Socket.IO server version: ^4.1.1
Server
import { Server, Socket } from 'socket.io';
import session from 'express-session';
const io = new Server(http.createServer(/* express app */), { /* cors /* });
const wrapper = (middleware: any) => (socket: Socket, next: any) => middleware(socket.request, {}, next);
io.use(wrapper(session(/* session configs */)));
io.on('connection', (socket: Socket) => {
const req = socket.request
console.log(req.session) // Typescript will warn that session is not in IncomingMessage
// console.log output shows no user
/* Session {
cookie: {
path: '/',
_expires: 2021-05-18T13:06:36.146Z,
originalMaxAge: 3600000,
httpOnly: true,
domain: undefined
}
} */
});
app.use((req, resp, next) => {
console.log(req.session) // user is in session
req.io = io;
next();
});
app.post('/login', (req, resp, next) => {
const user = // login user
req.session.user = user
});
// server listen and stuff
Socket.IO client version: ^4.1.1
Client
import { io } from "socket.io-client";
const socket = io("http://localhost", {});
socket.on("connect", () => {
console.log(`connect ${socket.id}`);
});
socket.on("disconnect", () => {
console.log("disconnect");
});
Expected behavior
socket.request.session
should have user
property in it when initializing session in express middleware (eg. - req.session.user = user
)
Platform:
- Device: Desktop and Mobile
- OS: Windows 10 and Android 10
Additional context