Я настроил приложение Node Express в Firebase Functions и приложение React в Firebase Hosting (аналогично шаблону , который я создал, за исключением того, что я настроил сеансовые куки в Express и Я использую Passport JS).
My firebase.json
содержит следующее:
{
"hosting": {
"public": "build",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "/api/**",
"function": "app"
}
]
}
}
Если я сделаю запрос прямой выборки из приложения React в API, используя полный абсолютный URL-адрес API, все будет работать просто так:
try {
const url = 'https://us-central1-[my-app-name]-app.cloudfunctions.net/app/api/v1.0/auth/status';
const response = await fetch(url,
{
method: 'GET',
credentials: 'include',
headers: {
'Content-Type': 'application/json',
},
}
);
json = await response.json();
console.log(json); // {"isAuthenticated":true}
} catch (error) {
throw error;
}
API проверяет существование пользователя в сеансе и соответственно возвращает ответ.
Однако, если я попытаюсь получить доступ к API через прокси-сервер перезаписи, который я настроил в файле firebase.json
, используя только относительный URL /api/v1.0/auth/status
, я все равно получу ответ (который подтверждает, что Firebase прокси-сервер соответствующим образом запрашивает) , но флаг isAuthenticated
имеет значение false, а не true.
Я предположил, что это потому, что в прокси-запросе отсутствует мой ценный заголовок withCredentials, поэтому я установил это и в файле firebase.json
:
{
"hosting": {
"public": "build",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "/api/**",
"function": "app"
}
],
"headers": [
{
"source": "/api/**",
"headers": [
{
"key": "Access-Control-Allow-Credentials",
"value": "true"
},
{
"key": "Content-Type",
"value": "application/json"
}
]
}
]
}
}
Однако, похоже, это не имеет никакого эффекта. Я что-то упускаю?
Редактировать: При ближайшем рассмотрении я полагаю, что это потому, что заголовок cookie не передается в приложение функций, когда Firebase проксирует запрос (заголовки «учетные данные» не требуются, поскольку они не пересекаются -оригинал), поэтому я считаю, что должен быть какой-то способ сказать Firebase включить куки в запрос на перезапись / прокси?