Проблема
Я продолжаю получать сообщение об ошибке «Не удалось подключиться к socket.io: сеанс с использованиемpassport.socketio.js не найден» и не могу понять, почему. Я просмотрел другие подобные сообщения, но это не кажется проблемой. Конфигурация кажется мне хорошей, поэтому я предполагаю, что проблема заключается в подключении к хранилищу MongoDB, которое работает нормально, потому что я вижу там данные сеанса, но передается только объект cookie с пустым объектом паспорта, если пользователь не аутентифицирован, или с информацией, если он вошел в систему. Так что сеанс кажется мне нормальным, но я не могу получить доступ к деталям сеанса с помощью socket.handshake, как задокументировано. Как подтвердить, что пользователь аутентифицирован в socket.io
РЕДАКТИРОВАТЬ
Я пытался использовать это для обмена сеансами, но я не могу получить паспорт, возвращаемый только пустой объект cookie, даже если пользователь аутентифицирован, паспорта нет
session: Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }
}
РЕДАКТИРОВАТЬ 2
Я заметил в документации, что может быть ошибка CORS, с которой я сталкивался раньше, и это может быть причиной того, что cookie не отправляется, как я понял. Мне пришлось изменить io на стороне сервера, потому что у меня была ошибка CORS. Я не знаю, можно ли это как-то связать. изменение localhost на 127.0.0.1 отказывается подключаться.
const io = require('socket.io')(http, {
cors: {
origin: "http://localhost:3000",
methods: ["GET", "POST"]
}
});
Это часть socket.request, поскольку вы можете видеть, что идентификатор сеанса отсутствует.
cleanup: [Function: cleanup],
socketio_version_1: true,
cookie: [Object: null prototype] {},
sessionID: '',
user: { logged_in: false }
Соответствующий код
var session = require('express-session')
const MongoStore = require('connect-mongo')(session);
var passportSocketIo = require("passport.socketio");
var cookieParser = require('cookie-parser');
var sessionStore = new MongoStore({ mongooseConnection: mongoose.connection })
app.use(cookieParser())
var sessionMiddleware = session({
secret: '12345678',
name: 'profile_session',
resave: true,
key: 'connect.sid',
saveUninitialized: true,
store: sessionStore
})
app.use(sessionMiddleware);
io.use(passportSocketIo.authorize({
cookieParser: cookieParser,
key: 'connect.sid',
secret: '12345678',
store: sessionStore,
success: onAuthorizeSuccess,
fail: onAuthorizeFail,
}));
Монго БД
session
:
{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"passport":{}}
Данные рукопожатия больше не хранятся в одном и том же месте. Не socket.handshake.user
, а socket.request.user
. Также вам нужно использовать IP-адрес (127.0.0.1) вместо localhost
. Итак, вы идете к 127.0.0.1:PORT
вместо localhost:PORT
на моем клиенте io.connect или?
Хорошо, я понял
В конце концов, это была ошибка CORS, и мне удалось исправить ее, используя этот пост. Теперь у меня проблемы с тем, что магазин не обновляется, когда я пытаюсь выйти из системы, и я всегда остаюсь в системе, ну да ладно
попробуй двигаться
app.use(cookieParser())
доsessionStore