У меня есть node.js auth api, обслуживаемый на auth.app.loc
, внешний интерфейс next.js (реагирует), обслуживаемый на app.loc
, а nginx действует как обратный прокси.
Любой мой запрос разрешается успешно, за исключением того, что файлы cookie не отправляются с сервера.
Вот мой auth
сервис подведен.
Подается на порт 5000 в док-контейнере.
fastify.register(require('fastify-cookie'));
fastify.register(require('fastify-cors'), {
origin: ['http://app.loc', 'http://192.168.0.248:3000'],
credentials: true,
});
fastify.post('/cookie', async (req, res) => {
res.setCookie('foo', 'foo');
res.header('bar', 'bar');
res.code(204);
});
Вот фрагмент моего интерфейса.
Подается на порту 3000 в док-контейнере.
const response = await fetch('http://auth.app.loc/cookie', {
method: 'post',
headers: {
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json'
},
credentials: 'include',
body: JSON.stringify({login, password})
});
И конфиг обратного прокси (nginx), также в контейнере Docker.
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
server_name app.loc;
listen 80;
location / {
proxy_pass http://192.168.0.248:3000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
server_name auth.app.loc;
listen 80;
location / {
proxy_pass http://192.168.0.248:5000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
Файл хоста Windows разрешает app.loc auth.app.loc в мой ip: 192.168.0.248
Теперь выполнение запроса из приложения реагирования через fetch
приводит к:
Но сделать такой же запрос (с помощью инструментов разработчика Chrome, скопируйте как curl bash) в Postman:
curl 'http://auth.app.loc/cookie' -H 'Accept: application/json, text/plain, */*' -H 'Referer: http://app.loc/signin' -H 'Origin: http://app.loc' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' -H 'Content-Type: application/json' --data-binary '{"login":"login","password":"password"}' --compressed --insecure
в результате set-cookie
передается
Почему заголовок set-cookie
не применяется при использовании fetch?
Я почти уверен, что это как-то связано с fetch
, но я уже использую credentials: 'include'
@ редактировать
Доступ к веб-интерфейсу через http://192.168.0.248:3000/
url и изменение URL-адреса для извлечения на http://192.168.0.248:5000/cookie
работает без проблем. Печенье проходит мимо. Но почему доменный подход не работает?