Это сводит меня с ума. Я попытался прочитать исходный код lusca, но мне было трудно его понять.
Я также проверил несколько примеров, но, поскольку каждая конфигурация отличается, и единственным результатом отладки, который у меня есть, являются две строки для сравнения, мне лучше обратиться за помощью!
Вот сторона сервера кода:
app.use([
cookieParser(process.env.SESSION_SECRET),
session({
resave: false,
saveUninitialized: true,
secret: process.env.SESSION_SECRET,
store: new MongoStore({ url: MONGO_URL, autoReconnect: true }),
cookie: {
secure: process.env.NODE_ENV === 'production'
},
}), lusca({
csrf: true,
xframe: 'SAMEORIGIN',
xssProtection: true,
})]);
А со стороны клиента я отправляю запросы Ajax POST
с заголовком x-csrf-token:l0gH3xmssge53E/p2NsJ4dGnHaSLdPeZ+bEWs=
:
fetch(url, {
method: 'POST',
credentials: 'include',
headers: {
'x-csrf-token': CSRF_TOKEN
}
});
Сумасшедшая вещь, это работает локально, но как только я перехожу https
в production
, я получаю сообщение об ошибке 403 Forbidden
.
Вот версии, которые я использую:
"cookie-parser": "1.4.3",
"express-session": "1.15.3",
"lusca": "1.5.1",
Также я прочитал это из express/session doc:
Примечание. Начиная с версии 1.5.0, промежуточное ПО cookie-parser больше не требуется для работы этого модуля.
Но что касается меня, мне нужно хранить какой-то постоянный идентификатор пользователей (дольше, чем сеанс). Мне нужно использовать файлы cookie для этого, верно?
Я хотел бы лучше понять всю тему сеанса/куки, но до сих пор я не нашел ни одного полезного ресурса по этой теме.
Спасибо!