Express. js Csurf работает в почтальоне, но не в React. js - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь настроить токены CSRF, чтобы я мог выполнить ряд проверок, прежде чем выдать клиенту токен для использования в будущих запросах.

Принимая руководство из документации по csurf , я настроил мой express маршрут со следующим:

const express = require('express');
const router = express.Router({mergeParams: true});
const csurf = require('csurf');
const bodyParser = require('body-parser');
const parseForm = bodyParser.urlencoded({ extended: false });

const ErrorClass = require('../classes/ErrorClass');

const csrfMiddleware = csurf({
    cookie: true
});

router.get('/getCsrfToken', csrfMiddleware, async (req, res) => {
    try {
        // code for origin checks removed for example
        return res.json({'csrfToken': req.csrfToken()});
    } catch (error) {
        console.log(error);
        return await ErrorClass.handleAsyncError(req, res, error);
    }
});

router.post('/', [csrfMiddleware, parseForm], async (req, res) => {
    try {
        // this returns err.code === 'EBADCSRFTOKEN' when sending in React.js but not Postman
    } catch (error) {
        console.log(error);
        return await ErrorClass.handleAsyncError(req, res, error);
    }
});

Для контекста код React. js выглядит следующим образом: makePostRequest 100% отправляет маркер _csrf обратно к express in req.body._csrf

  try {
            const { data } = await makePostRequest(
                CONTACT,
                {
                    email: values.email_address,
                    name: values.full_name,
                    message: values.message,
                    _csrf: csrfToken,
                },
                { websiteId }
            );

        } catch (error) {
            handleError(error);
            actions.setSubmitting(false);
        }

Конечная точка почтальона, похоже, отправляет те же данные после загрузки конечной точки /getCsrfToken, и я вручную обновляю токен _csrf.

postman example

Что-то я не правильно делаю? Я думаю, что это может быть связано с Node.js 's cook ie system.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...