У меня есть простая express настройка сервера, например:
app.use(bodyParser.json());
app.use(cookieParser());
app.use(csurf({ cookie: true }));
// routes
app.use(Routes imported from another file);
В настоящее время клиент - это просто простая форма в реакции. Я загружаю некоторые исходные данные до того, как приложение реагирует на загрузку, и там устанавливается csrf cook ie.
У меня есть простая функция для анализа клиента csrf cook ie. Я проксирую сервер express в приложении create-реакции-приложение, поэтому я не могу просто установить метатег в заголовке.
const csrfToken = () => {
const cookies = decodeURIComponent(document.cookie).split(';');
const token = cookies.find(cookie => cookie.includes('_csrf'));
if (token) {
return token.split('=')[1]
}
}
Я использую fetch для отправки данных и токена
const response = await fetch(url, {
credentials: 'include',
method: 'POST',
headers: {
'Connection': 'keep-alive',
'Content-Type': 'application/json',
'X-CSRF-Token': csrfToken()
},
body: JSON.stringify({ ...body })
});
Я попытался закомментировать строку, которая говорит приложению использовать csurf, и проверить, что все присутствует в запросе. Я могу убедиться, что повар ie и заголовок совпадают в каждом отправляемом запросе. Все кажется правильным, но я все еще получаю ошибку 403, поэтому я должен что-то упустить. Я в растерянности от того, что это могло бы быть, и все, что я мог найти, прибегая к помощи, - это другие люди, настраивающие свои приложения очень похожим образом.