Файлы cookie принимаются, но не сохраняются. React / NodeJS - PullRequest
0 голосов
/ 03 февраля 2020

Итак, у меня есть приложение с полным стеком, над которым я работаю, оно состоит из внешнего интерфейса React, внутреннего интерфейса NodeJS и обратного прокси-сервера NGINX. Все они упакованы в контейнеры с использованием docker.

Моя проблема в том, что когда я аутентифицируюсь с использованием локальной стратегии паспорта, это действительно отправляет повара ie обратно в ответе. Тем не менее, похоже, что этот повар ie не задан во внешнем интерфейсе, поскольку в последующие запросы не входит указанный повар ie.

. Вот где я настраиваю повара ie в ответе. object:

res
    .status(200)
    .cookie("token", token, {
        httpOnly: true,
        expires: new Date(Date.now() + 12 * 3600000)
    })
    .send(*jsonObject*);

А вот запрос Fetch, который я использую для входа в систему:

return await fetch(`${baseUrl}/login`, {
    method: 'POST',
    headers: {
        Accept:'application/json',
        'Content-Type': 'application/json'
    },
    credentials: 'include',
    body: JSON.stringify({
        email: username,
        password: password
    })
})
    .then(async function(response) {
        const jsonResponse = await response.json();
        return jsonResponse;
    })

Пример вызова выборки, требующий включения повара ie

return await fetch(`${baseUrl}/getUserInfo`, {
    method: "POST",
    headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
    },
    credentials: 'include'
})
    .then(async function(response) {
        const jsonResponse = await response.json();
        return jsonResponse;
    })
    .catch(e => console.log(e));

А вот мой nginx config

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    if ($request_method = 'OPTIONS') {
        return 200;
    }

    root /var/www/html;

    index index.html;

    # To allow POST on static pages
    error_page  405     =200 $uri;

    location / {
        proxy_pass http://app;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        break;
    }

    location ~* \.(eot|otf|ttf|woff|woff2)$ {
        add_header Access-Control-Allow-Origin *;
    }

    location ~ /api/(?<url>.*) {
        proxy_pass http://api/$url;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location /health-check {
        return 200;
        access_log off;
    }
}

И показывающий, как реагирует сервер при попадании в конечную точку / login

Изображение результата

Я пытался установить для свойства credentials оба параметра: «include» и «same-origin», но безрезультатно.

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