Есть несколько движущихся частей, поэтому трудно понять, что здесь нужно отлаживать.
У меня есть веб-приложение на одном порту локального хоста и простой помощник на другом локальном хосте, на котором выполняется экспресс-приложение 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 и сохраните сеанс, как и ожидалось.Это, вероятно, изменит динамику проблемы.