使用httpsCallable()调用Firebase云函数时出现CORS错误

时间:2019-10-06 05:23:12

标签: firebase cors google-cloud-functions

我正在尝试从React客户端调用Firebase云功能。

  1. 我能够使用HTTP请求成功调用这些函数(如here所述)。这需要在云功能中设置完整的Express应用。

  2. 现在,我尝试使用httpsCallable()(如here所述)直接从客户端调用云函数。与通过HTTP请求进行调用相比,此方法似乎具有两个优点。但是,使用这种方法时,出现以下CORS错误:

  

CORS政策禁止从来源“ https://us-central1-myapp.cloudfunctions.net/helloWorld”访问“ http://localhost:3000

我如何进行这项工作?值得麻烦吗?真的是首选方式吗?

这是我的云功能:

import * as functions from 'firebase-functions';

export const helloWorld = functions.https.onRequest((request, response) => {
    response.send('Hello from Firebase!');
});

这是我从客户那里打电话的方式:

const sayHello = async (): Promise<string> => {
    const helloWorld = firebase.functions().httpsCallable('helloWorld');
    const result = await helloWorld();
    return result.data;
};

1 个答案:

答案 0 :(得分:1)

这样做

const helloWorld = firebase.functions().httpsCallable('helloWorld');
const result = await helloWorld();

您确实通过定义如下所示的被调用函数来调用Callable Cloud Function但是

functions.https.onRequest((request, response) => {})

您正在定义一个HTTPS Cloud Function 与众不同的

您应将Cloud Function定义为Callable功能,如下所示:

export const helloWorld =  = functions.https.onCall((data, context) => {
  return { response: 'Hello from Firebase!' };
});