Экспресс-сессия создает новую сессию при каждой загрузке страницы - PullRequest
0 голосов
/ 22 июня 2019

У меня есть веб-приложение MERN с express-session, которое я пытаюсь развернуть на heroku.Я настроил внутренний запрос, используя прокси, установив прокси в файле package.json.Он работает так, как должен, когда и интерфейсная часть, и фоновая часть работают локально на localhost.

Когда я развертываю серверную часть на heroku, то после каждого обновления браузера экспресс-сессия создаетновый сеанс / документ в mongodb.

После долгих отладок выяснилось, что установка axios.defaults.baseURL в URL-адресе сервера вызывала проблему.(Я до сих пор не знаю, почему.)

По-видимому, установка прокси в package.json работает только для разработки, потому что, когда я развертываю приложение, API-интерфейс вызывается из внешнего URL-адреса.Поэтому во время разработки, когда все работает на локальном хосте, а прокси установлен на package.json, тогда все работает хорошо.

Проблема заключается в том, что, когда я устанавливаю axios.defaults.baseURL.Когда я это делаю, то после каждой перезагрузки страницы сеанс воссоздается.

Как правильно подключить интерфейс к серверу?

Session.js

const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');

module.exports = function(app) {
    var sess = {
        secret: 'mySecret',
        cookie: { token: null },
        saveUninitialized: false,
        resave: true,
        store: new MongoStore({ mongooseConnection: mongoose.connection })
    };

    if (app.get('env') === 'production') {
        app.set('trust proxy', 1);
        sess.cookie.secure = true;
    }

    app.use(session(sess));
};

Route.js

module.exports = function(app) {
    app.use(cors());
    app.use(helmet());
    require('../middleware/session')(app);
    // Other routes...
};

1 Ответ

0 голосов
/ 23 июня 2019

Способ работы express-session заключается в том, что он сохраняет эталонный cookie-файл локально, и когда вы отправляете запрос, получает ли он, публикует, помещает или удаляет, этот запрос отправляет этот ссылочный файл cookie вместе с запросом к бэкэнду , Express-session затем видит этот файл cookie, отправляет и получает соответствующие данные из хранилища данных, чтобы вы могли использовать их в своем приложении.

При установке axios.defaults.baseURL cookie не пересылается из локальной системы на сервер. Способ отправить его можно, установив:

axios.defaults.withCredentials = true;

Это гарантирует, что куки будут отправлены. После того, как вы установите это, вам нужно будет установить определенный origin с помощью CORS, и вы не сможете использовать '*'.

...