Firebase云功能 - onCall无法正常工作

时间:2018-05-06 02:45:02

标签: javascript firebase cors google-cloud-functions

我正在测试FB文档(https://firebase.google.com/docs/functions/callable)中描述的一个非常简单的实现,但它无效。

这是 Firebase功能部署到云端:

exports.getRecSkills = functions.https.onCall((data, context) => {
  return {text: data.text};
});

...和我的客户电话(初始化FB后):

var getRecSkills = firebase.functions().httpsCallable('getRecSkills');

getRecSkills({text: '123'}).then(function(result) {
  console.log(result);
}).catch(function(error) {
  console.log(error.code);
  console.log(error.message);
});

我收到了与CORS标题相关的问题,但在文档中,它没有提到对CORS的需求......我错过了什么?

enter image description here

一些注意事项:

  • 我已经能够执行其他Firebase功能(即HTTPS, 数据库)所以我不认为我设置Firebase是错误的。
  • 已更新至最新的Firebase,因此不要认为这是一个问题。
  • 给我一个"内部"错误,API文档没有帮助,除了"某些内容严重错误"。
  • 我似乎无法使功能发挥作用(它一直在给我 400个错误)当通过shell进行本地测试时,即使我得到了它 使用任何其他数据库和https函数

已经挣扎了很长时间......请帮助!

3 个答案:

答案 0 :(得分:1)

我最近遇到了同样的问题,但是在我的配置对象中包含了“ projectId”之后就解决了。以下是Java版Firebase配置对象的代码段。确保所有字段都已填入配置对象中,并且应该可以解决您未定义的问题。

     var config = {
     apiKey: "<API_KEY>",
     authDomain: "<PROJECT_ID>.firebaseapp.com",
     databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
     projectId: "<PROJECT_ID>",
     storageBucket: "<BUCKET>.appspot.com",
     messagingSenderId: "<SENDER_ID>",
     };

答案 1 :(得分:0)

如果遇到CORS问题,并且正在使用express来公开API函数,则必须允许cors:

import * as cors from 'cors';
import * as express from 'express';

const corsHandler = cors({origin: true});

const app = express();
app.use(corsHandler);

app.post('/createUser', async (request, response) => {
  await createUser(request, response);
});

exports.api = functions.https.onRequest(app);

答案 2 :(得分:0)

要摆脱if name in ("Alice", "Bob"): 错误,请确保您的CORS具有以下firebase.json

headers

如果您在本地设备上的 Firebase Emulator 上运行,请确保在初始化Firebase功能后具有以下条件,否则本地设备仍将调用远程Firebase功能,并且您会再次遇到"hosting": [ { "headers": [ { "source": "**", "headers": [ { "key": "Access-Control-Allow-Origin", "value": "*" } ] } ] } ] 错误:

CORS
相关问题