在Firebase客户端应用程序中实现可调用的云功能

时间:2018-03-26 09:10:18

标签: firebase google-cloud-functions

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

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

我运行了一些云功能,其中包括一些我希望转换为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 Web应用程序调用云功能。 谢谢!

更新 感谢@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);
  },
}

3 个答案:

答案 0 :(得分:6)

我自己遇到了同样的问题并通过安装和导入 @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 Modules

const firebase = require('@firebase/app').default;
require('@firebase/functions');

// Do stuff with `firebase` and `firebase.functions`

希望有所帮助!实际文档并不十分清楚为了调用函数必须这样做。

答案 1 :(得分:0)

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

我认为没有像firebaseApp.functions那样的东西。

答案 2 :(得分:0)

关于@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即可。 / p>