экспресс-cookie не указан в ответе, не отображается в следующем запросе - PullRequest
0 голосов
/ 21 апреля 2019

Есть несколько движущихся частей, поэтому трудно понять, что здесь нужно отлаживать.

У меня есть веб-приложение на одном порту локального хоста и простой помощник на другом локальном хосте, на котором выполняется экспресс-приложение NodeJS с несколькими конечными точками.

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

Настройка

Клиент выполняет базовые вызовы GET ajax (в настоящий момент jQuery) в экспресс-приложение.

Я установил http допуск для файлов cookie сеанса:

app.use(cookieSession({
  name: 'session',
  keys: ['abcdefg'],
  maxAge: 24 * 60 * 60 * 1000, // 24 hours,
  secure: false
}))

Я установил перекрестные запросы на экспресс-приложение:

app.use((req, res, next) => {
    const corsWhitelist = [
        'http://localhost:8000',
        'http://localhost:8777'
    ];
    if (corsWhitelist.indexOf(req.headers.origin) !== -1) {
        res.header('Access-Control-Allow-Origin', req.headers.origin);
        res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
    }

    next();
});

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

Мясо обработчика запросов:

app.get('/initialize', (req, res) => {
    console.log(req.session);

    //if we have a session with verified status 
    if (req.session.hasOwnProperty("userId") && req.session.userId){
        res.send({result: 'OK', message: 'good - 1'});
        return;
    }

    const id = uuid.v4();
    req.session.userId = id;
    res.send({result: 'OK', message: 'good - 2'});
    return;
});

Я всегда всегда получаю второй ответ «хорошо - 2»из вызова Аякса.Журнал всегда показывает сеанс как {}

Вероятно, стоит отметить, что Chrome devtools показывает «Предварительные заголовки показаны» для заголовков запроса, а set-cookie не отображается в заголовках ответа.AJAX - это простой GET для конечной точки с одним переданным параметром.

Обновление

Мне только что пришло в голову попробовать без использования вызова AJAX.Нажав на URL, вы получите cookie и сохраните сеанс, как и ожидалось.Это, вероятно, изменит динамику проблемы.

1 Ответ

0 голосов
/ 21 апреля 2019

Исправлено было использование запроса / ответа jsonp, чтобы файлы cookie передавались по вызову ajax.Ничего общего с экспрессом на самом деле.

https://samueleresca.net/2015/07/json-and-jsonp-requests-using-expressjs/

...