Pass.socket.io не может исправить сессию не найдено

Проблема
Я продолжаю получать сообщение об ошибке «Не удалось подключиться к 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":{}}

попробуй двигаться app.use(cookieParser()) до sessionStore

Someone21 14.12.2020 16:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
648
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Данные рукопожатия больше не хранятся в одном и том же месте. Не socket.handshake.user, а socket.request.user. Также вам нужно использовать IP-адрес (127.0.0.1) вместо localhost. Итак, вы идете к 127.0.0.1:PORT вместо localhost:PORT

на моем клиенте io.connect или?

Edi_Hadzic 15.12.2020 13:12
Ответ принят как подходящий

Хорошо, я понял
В конце концов, это была ошибка CORS, и мне удалось исправить ее, используя этот пост. Теперь у меня проблемы с тем, что магазин не обновляется, когда я пытаюсь выйти из системы, и я всегда остаюсь в системе, ну да ладно

https://github.com/jfromaniello/passport.socketio/issues/95

Другие вопросы по теме