Подтвердить что ты не робот

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 = {}

4b9b3361

Ответ 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 или соглашениях об именах.