Firebase cloud function не будет хранить файл cookie, отличный от "__session"
Я следовал образцу authorized-https-endpoint и только добавил console.log для печати req.cookies, проблема в том, что cookie файлы всегда пусты {}
Я установил cookie файлы с помощью клиентских JS-вызовов, и они сохраняются, но по какой-то причине, Я не могу получить их на стороне сервера.
Вот полный код index.js, он точно такой же, как и в примере:
'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const express = require('express');
const cookieParser = require('cookie-parser')();
const cors = require('cors')({origin: true});
const app = express();
const validateFirebaseIdToken = (req, res, next) => {
console.log(req.cookies); //// <----- issue this is empty {} why??
next();
};
app.use(cors);
app.use(cookieParser);
app.use(validateFirebaseIdToken);
app.get('/hello', (req, res) => {
res.send('Hello!!');
});
exports.app = functions.https.onRequest(app);
хранить куки:
curl http://FUNCTION_URL/hello --cookie "__session=bar"//req.cookies = {__session: bar}
не хранит:
curl http://FUNCTION_URL/hello --cookie "foo=bar"//req.cookies = {}
Ответы
Ответ 1
Если вы используете Firebase Hosting + Cloud Functions, __session
- это единственный файл cookie, который вы можете сохранить. Это необходимо для того, чтобы мы могли эффективно кэшировать контент на CDN - мы __session
все куки файлы из запроса, кроме __session
. Это должно быть задокументировано, но, похоже, нет (упс!). Мы обновим документацию, чтобы отразить это ограничение.
Кроме того, вам нужно установить заголовок Cache-Control как частный
res.setHeader('Cache-Control', 'private');
Ответ 2
Является ли приведенный выше ответ и соглашение о присвоении имен действительным? Кажется, я не могу передать какой-либо файл cookie, чтобы включить файл cookie сеанса с именем "__session", в облачную функцию.
Я установил простую тестовую функцию с надлежащими правилами переписывания firebase:
export const test = functions.https.onRequest((request, response) => {
if (request.cookies) {
response.status(200).send('cookies: ${request.cookies}');
} else {
response.status(200).send('no cookies');
}
});
Функция вызывается каждый раз, когда я обращаюсь к https://www.xxxcustomdomainxxx.com/test, но request.cookies всегда неопределен и, следовательно, "cookies" не возвращается.
Например, следующее всегда возвращает "нет куки":
curl https://www.xxxcustomdomainxxx.com/test --cookie "__session=testing"
Я получаю такое же поведение в браузере, даже после проверки, что cookie файл сеанса с именем __session был правильно установлен через мою конечную точку аутентификации. Кроме того, ссылка, приведенная выше (https://firebase.google.com/docs/hosting/functions#using_cookies), больше не указывает что-либо о файлах cookie или соглашениях об именах.