【问题标题】:Implement callable cloud functions in Firebase client app在 Firebase 客户端应用中实现可调用的云功能
【发布时间】:2018-09-04 09:07:15
【问题描述】:

我最近发现了Firebase callable functions,它允许我从客户端调用类似 HTTPS 触发器的函数(并且支持 auth())。

我很难在我现有的 Firebase 网络客户端应用程序中实现这一新功能。

我有一些云函数正在运行,其中有一些我想转换为 HTTPS 可调用函数的 HTTPS 函数(使用functions.https.onCall)。

文档表明:

Set up your client development environment
<script src="https://www.gstatic.com/firebasejs/4.12.0/firebase.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.12.0/firebase-functions.js"></script>

我的代码是:

import firebase from 'firebase';
import 'firebase/firestore';

const firebaseApp = firebase.initializeApp({
  apiKey: '....',
  authDomain: '....',
  databaseURL: '....',
  projectId: '....',
  storageBucket: '....',
  messagingSenderId: '....',
});

const db = firebaseApp.firestore();
const auth = firebaseApp.auth();
const functions = firebaseApp.functions();

export { db, auth, functions };

当我运行我的应用程序时,出现以下错误:

Uncaught TypeError: firebaseApp.functions is not a function

我尝试了yarn add firebase-functions,然后是import 'firebase-functions,但该应用程序需要firebase-admin。我担心客户端应用程序太多了,所以我可能会走错方向。

有人可以帮我解决这个问题吗? (!) 此问题不是与服务器端 Firebase SDK for Cloud Functions (Node JS) 有关。它是关于直接从 Firebase 网络应用程序调用云函数。 谢谢!

更新: 感谢@Andrew 的帖子,这解决了我的问题:

我的配置

import firebase from 'firebase';
import 'firebase/firestore';
import '@firebase/functions';
import firestoreConfig from '@/config/firestore';

const firebaseApp = firebase.initializeApp(firestoreConfig /* The JSON configuration from my Firebase project */);

const db = firebaseApp.firestore();
const auth = firebaseApp.auth();
const functions = firebaseApp.functions();

export { db, auth, functions };

使用配置:

import { db, functions } from '@/database/firestoreInit';

export default {
  addMessage(text) {
    const addMessage = functions.httpsCallable('addMessage');
    return addMessage({ text }).then(result => result);
  },
}

【问题讨论】:

    标签: firebase google-cloud-functions


    【解决方案1】:

    我自己也遇到了同样的问题,并通过安装和导入 @firebase/functions npm 包解决了这个问题。我在这里找到了github上的解决方案: https://github.com/firebase/firebase-js-sdk/blob/master/packages/functions/README.md

    来自 github 上的 README:

    ES 模块

    import firebase from '@firebase/app';
    import '@firebase/functions'
    // Do stuff w/ `firebase` and `firebase.functions`
    

    CommonJS 模块

    const firebase = require('@firebase/app').default;
    require('@firebase/functions');
    
    // Do stuff with `firebase` and `firebase.functions`
    

    希望对您有所帮助!实际的文档并不太清楚必须这样做才能调用函数。

    【讨论】:

    • 谢谢@Andrew,你让我开心:) 这正是我想念的
    【解决方案2】:

    关于@firebase/functions

    此包不适合直接使用,只能通过官方支持的 firebase 包使用。

    这对我有用:

    import * as firebase from 'firebase/app'; // Typescript
    // import firebase from 'firebase/app'; // JS
    import 'firebase/functions';
    
    const myCallableFunc = firebase.functions().httpsCallable('myCallableFunc');
    

    我不知道如何使用 CDN 导入 firebase-functions,但如果您使用的是 npm,则不需要 firebase-functions 包,只需安装 firebase 即可。

    【讨论】:

    • 对我来说,关键是你的回答中的第一个导入让我头疼了 3 天
    【解决方案3】:

    按照此处提到的步骤操作。 Firebase cloud functions

    我认为没有什么比得上firebaseApp.functions

    【讨论】:

    • 您好,我已按照firebase.google.com/docs/functions/… 的教程进行操作。你可以看到有两个部分。第一个是
    猜你喜欢
    • 2018-09-06
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2019-07-13
    相关资源
    最近更新 更多