Данные Экспресс-сессии отсутствуют при открытии сайта по HTML-ссылкам - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть экспресс-приложение с использованием экспресс-сессии. Я использую Connect-Mongo в качестве магазина сессий. По большей части это работает нормально, но я столкнулся с проблемой, когда данные сеанса отсутствуют, когда сайт открывается по ссылке HTML на другом сайте.

Чтобы уточнить, есть ли у меня отдельная простая тестовая страница html с тегом привязки, указывающим на мое экспресс-приложение:

  • Я нажимаю эту ссылку, сайт открывается, но данные сеанса не будут доступны. Не имеет значения, установил ли я цель ссылки "_blank" или нет. Если я обновлю браузер, данные сеанса будут доступны.
  • Если вместо того, чтобы щелкнуть ссылку html, я щелкну правой кнопкой мыши и выберу «Открыть ссылку в новой вкладке» откроет сайт и данные сессии будут доступны.
  • Если я вставлю эту ссылку во что-то вроде Slack и нажму на нее, откроется сайт и будут доступны данные сеанса.
  • Если я скопирую ссылку и вставлю ее в браузер, сайт загрузится и данные сеанса станут доступны.

Итак, я пытаюсь понять, что может привести к тому, что сеанс не будет работать, в зависимости от того, как открывается ссылка.

Я пробовал все варианты конфигурации сеанса, о которых могу думать, но ничего не решает проблему. Я даже попробовал два разных магазина сессий монго.

Я использую: Экспресс 4.16.4 Экспресс сессия 1.15.6 Connect Mongo 2.0.3 Мангуст 5.4.22 Монго 4.0

Я также использую паспорт JS для аутентификации, но я попытался просто сохранить и извлечь случайные данные сеанса, и у меня возникла та же проблема.

Вот мой конфиг сессии:

import * as createMongoDBStore from 'connect-mongo';
import * as session from 'express-session';

const MongoStore = createMongoDBStore(session);

let sessionStore = new MongoStore({
     mongooseConnection: mongoose.connection,
     collection: 'Sessions'
    });


app.use(session({
    cookie: {
        expires: true,
        path: '/',
        domain: process.env.DOMAIN_NAME || 'localhost',
        httpOnly: true,
        maxAge: parseInt(process.env.COOKIE_EXPIRES_IN) || 86400000,
        sameSite: true,
        secure: 'auto',
        signed: true,
    },
    name: process.env.SESSION_NAME || 'MYAPP',
    resave: false,
    secret: process.env.APP_SESSION_TOKEN,
    saveUninitialized: false,
    store: sessionStore
}));
...