Со стороны клиента передай jwt токен или куки (сессию). На стороне ноды напиши мидлвар, который в момент подключения обработает эти данные и запишет клиента.
Например, так:
const io = socket();
io.use(async (socket, next) => {
try {
const { token } = socket.handshake.query;
const data = await verify(token);
socket.request.user = data;
return next();
} catch (err) {
// ignore
return next();
}
})
Теперь у тебя в объекте подключения есть данные пользователя и ты можешь отправить сообщение конкретному пользователю, найдя его соединение.