我最近发现了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);
},
}
答案 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软件包使用。
这对我有用:
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>