Облачные функции Firebase: "status": "INVALID_ARGUMENT" - PullRequest
0 голосов
/ 29 мая 2020

Я локально тестирую облачную функцию Firebase. Когда я вызываю эту функцию с использованием локального URL http://localhost:5001/projectName/us-central1/functionName, как описано здесь :

exports.createSession = functions.https.onRequest((_req, res) => {
  res.status(200).send('TESTING');
});

, функция работает и возвращает строку.

Однако, когда я вызовите эту функцию:

exports.createSession = functions.https.onCall((data, context) => {
  return 'TESTING';
});

Выдает ошибку: {"error":{"message":"Bad Request","status":"INVALID_ARGUMENT"}}

Я бы хотел использовать последнюю функцию, потому что я хочу получить доступ к объекту context.auth для проверки пользователя Аутентификация Firebase.

Я использую Firebase CLI v8.4 и Node v10.20.

Что мне не хватает во второй функции, чтобы заставить ее работать? Я не вызываю это с какими-либо аргументами, потому что мне это не нужно.

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Вы сравниваете вызываемую функцию , использующую onCall, с HTTP-функцией , используя onRequest. Вызываемые функции реализованы совсем иначе, чем функции HTTP. Я предлагаю прочитать документацию, на которую я ссылаюсь, чтобы лучше понять разницу. Суть в том, что вызываемые функции следуют определенному c протоколу , и что любой клиентский доступ должен следовать этому протоколу или, возможно, получать ошибку, которую вы здесь показываете. Лучшая реализация этого протокола - клиентский SDK, предоставляемый Firebase - вы должны использовать его для вызова функции.

Если вы хотите, чтобы обычная функция HTTP вызывалась с использованием обычных библиотек HTTP, не используйте вызываемый вообще. Вы можете передать информацию аутентификации в функцию HTTP вручную с помощью токена ID, а затем проверить его с помощью Firebase Admin SDK . В ссылке на документацию есть примеры.

0 голосов
/ 30 мая 2020

Ответ заключается в том, что вы не можете вызвать метод .onCall так же, как метод onRequest, вы должны вызывать его из SDK. Если аргумент data отсутствует, будет выдана ошибка:

Если клиентский триггер активирован, но запрос имеет неправильный формат, например, не JSON, с недопустимыми полями , или отсутствует поле данных, запрос отклоняется с помощью 400 Bad Request с кодом ошибки INVALID_ARGUMENT.

Таким образом, вы должны вызывать его с аргументом, даже если вам не нужно использовать аргумент для чего угодно.

...