Есть такая реализация проксирования запросов к api, по неизвестным мне причинам значение куки, которая приходит в ответе, не меняется, но меняются его параметры (например httpOnly).
import { joinURL } from 'ufo';
import { parse as parseCookies } from 'set-cookie-parser';
export default defineEventHandler((event) => {
const { API_URI } = useRuntimeConfig();
const path = event.path.replace(/^/api//, '');
const url = joinURL(API_URI, path);
return proxyRequest(event, url, {
onResponse(event, response) {
const combinedCookie = response.headers.get('set-cookie');
if (combinedCookie) {
const cookies = parseCookies(combinedCookie);
cookies.forEach((cookie) => {
const { name, value, ...options } = cookie;
console.info('cookie', cookie);
setCookie(event, name, value, {
path: options.path,
expires: options.expires,
maxAge: options.maxAge,
domain: options.domain,
secure: options.secure || false,
httpOnly: options.httpOnly || false,
});
});
}
},
});
});
Согласно этому документу Попробуйте этот
// сервер/api/endpoint.ts
import { appendResponseHeader } from "h3";
const res: any = await $fetch(url, { method, body, query, headers })
for (const cookie of res.headers.getSetCookie()) appendResponseHeader(event, 'set-cookie', cookie)
return res
Я решил свою проблему с помощью этого метода.
const event = useRequestEvent();
const res = await $fetch<{ accessToken: string }>('/api/auth/refresh', {
method: 'POST',
headers: useRequestHeaders(['cookie']),
onResponse({ response }) {
const cookies = response.headers.getSetCookie();
if (cookies.length) {
cookies.forEach((cookie) => {
if (event) {
appendResponseHeader(event, 'set-cookie', cookie);
}
});
}
},
});
Благодарим вас за вклад в сообщество Stack Overflow. Возможно, это правильный ответ, но было бы очень полезно предоставить дополнительные пояснения к вашему коду, чтобы разработчики могли понять ваши рассуждения. Это особенно полезно для новых разработчиков, которые не так хорошо знакомы с синтаксисом или пытаются понять концепции. Не могли бы вы отредактировать свой ответ, включив в него дополнительную информацию на благо сообщества?
Пожалуйста, отредактируйте свой вопрос, включив в него минимально воспроизводимый пример, чтобы читатели могли запустить ваш код и ответить на ваш вопрос.