Как настроить express -сессию в производство. Express -сессия не работает в https - PullRequest
0 голосов
/ 11 января 2020

Я использую express -session и connect-mon go для хранения сессии, и она отлично работает в среде разработки. Тем не менее, это не постоянные сеансы в производстве. Когда я вошел в систему, я могу получить сеанс на сервере по console.log(req.sesssion). Однако сеанс не определен, если я перейду на другой URL.

const whitelist = ['https://example.com', 'https://www.example.com'];
const corsOptions = {
  origin(origin, callback) {
    if (whitelist.indexOf(origin) !== -1) {
      callback(null, true);
    } else {
      callback(new Error('Not allowed by CORS'));
    }
  }
};
app.use(cors(corsOptions));
app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
  store,
}));

1 Ответ

0 голосов
/ 11 января 2020

После поиска ответа я потратил около суток. Наконец, я обнаружил проблемы, вызывающие все головные боли. Проблема была связана с http-запросами. Я использую axios для запросов, и по умолчанию Ax ios не получает или отправляет файлы cookie. Чтобы иметь возможность работать с файлами cookie, мне нужно было передать параметры конфигурации Ax ios. {withCredentials: true} для каждого запроса, который я сделал. Спасибо автору сообщения .

Axios.post(url, data, { withCredentials: true })...

Однако это привело меня к другой проблеме.

"Значением заголовка« Access-Control-Allow-Credentials »в ответе является« », которое должно быть« true », если режим учетных данных запроса« include »."

Затем я добавил credentials: true в свой модуль cors () вот так .

const corsOptions = {
  origin(origin, callback) {
    if (whitelist.indexOf(origin) !== -1) {
      callback(null, true);
    } else {
      callback(new Error('Not allowed by CORS'));
    }
  },
  credentials: true
};

Теперь мой проект работает и помогает пользователям облегчить им жизнь :.)

...