Как связать Socket.IO с сессиями express-session?

Никак не могу совместить сессии вместе с Socket.io. Я авторизуюсь через Passport.js и мне нужно это запомнить и работать как с одним клиентом, а у меня через каждое обновление страницы Socket работает как с разными пользователями, никак не получается совместить.
  • Вопрос задан
  • 5213 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Quickerz
Вариант 1. Пишем свой middleware, который будет шарить сессию

var express = require("express");
var Server = require("http").Server;
var session = require("express-session");
var RedisStore = require("connect-redis")(session);

var app = express();
var server = Server(app);
var sio = require("socket.io")(server);

var sessionMiddleware = session({
    store: new RedisStore({}), 
    secret: "secret",
});

sio.use(function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res, next);
});

app.use(sessionMiddleware);

app.get("/", function(req, res){
    req.session 
});

sio.sockets.on("connection", function(socket) {
  socket.request.session // Теперь сессия доступна через сокет
});


server.listen(8080);


Вариант 2. Используем https://github.com/techpines/express.io
Вариант рабочий, но есть нюансы с апи экспресса. Местами оно немного устаревшее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы