调用Firebase函数时,httpsCallable不是函数

尼古拉斯

我正在尝试使用Firebase身份验证和Firebase函数来实现基于角色的身份验证。现在,我有一个按预期方式工作的注册表格,现在我正试图添加一个表格,以便您提交一封电子邮件,该电子邮件调用Firebase函数,该函数将向用户附加自定义声明。我已经通过终端将函数添加到Firebase中,并且正在项目中调用函数,但是每当我通过电子邮件提交表单时,都会出现httpsCallable is not a function错误。

这是我的文件:

函数文件夹中的index.js

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

exports.addAdminRole = functions.https.onCall((data, context) => {
  //get user and add custom claim (admin)
  return admin
    .auth()
    .getUserByEmail(data.email)
    .then(user => {
      return admin.auth().setCustomUserClaims(user.uid, {
        admin: true
      });
    })
    .then(() => {
      return {
        message: `Success! ${data.email} has been made admin`
      };
    })
    .catch(err => {
      return err;
    });
});

我的firebaseInit.js配置文件,在其中我将所有与firebase相关的内容称为

import firebase from "firebase/app";
import "firebase/firestore";
import "@firebase/functions";
import firebaseConfig from "./firebaseConfig";
const firebaseApp = firebase.initializeApp(firebaseConfig);

export const fc = firebase.functions();
export const db = firebase.firestore();
export const fv = firebase.firestore.FieldValue;

export default firebaseApp.firestore();

我的Vue组件的形式是

<template>
  <div class="home">
    <h3>Welcome to Site</h3>

    <h3>Add user to admin</h3>
    <div class="row">
      <form @submit.prevent="addAdmin()" class="col s12">
        <div class="row">
          <div class="input-field col s12">
            <input id="email" type="email" class="validate" v-model="email" />
            <label for="email">Email</label>
          </div>
        </div>
        <button type="submit" class="btn">Submit</button>
        <router-link to="/members" class="btn grey">Cancel</router-link>
      </form>
    </div>
  </div>
</template>

<script>
import firebase from "firebase/app";
import fc from "../data/firebaseInit";
export default {
  name: "home",
  data() {
    return {
      email: ""
    };
  },
  methods: {
    addAdmin() {
      const addAdminRole = fc.httpsCallable("addAdminRole");
      addAdminRole(this.email).then(result => {
        console.log(result);
      });
    }
  }
};
</script>

有人可以阐明为什么我会收到此错误吗?我是否忘记导入与Firebase相关的内容?

雷诺·塔内克(Renaud Tarnec)

您的问题来自以下事实:

export const fc = firebase.functions();
export const db = firebase.firestore();
export const fv = firebase.firestore.FieldValue;

export default firebaseApp.firestore();

firebaseInit.js文件中,您没有导出fcfv顺便说一句)

以下应该工作

import firebase from "firebase/app";
import "firebase/firestore";
import "firebase/functions";   // <-- Note that the @ was removed
import firebaseConfig from "./firebaseConfig";
const firebaseApp = firebase.initializeApp(firebaseConfig);

const fc = firebase.functions();
const db = firebase.firestore();
const fv = firebase.firestore.FieldValue;

export { fc, db, fv };

然后,在您的组件中执行以下操作:

import {fc, db, fv} from "../data/firebaseInit";

//....

或以下仅需使用fc和的内容db,例如:

import {fc, db} from "../data/firebaseInit";

//....

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Firebase函数.httpsCallable(...)。则不是函数

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

TypeError:调用jQuery函数时$不是函数

Firebase .httpsCallable函数始终返回“超出最大调用堆栈大小”

Firebase云函数使用当前值而不是最初调用函数时的值

调用 asyc await 时 undefined 不是函数

调用`useFirestoreConnect`时对象不是函数

TypeError:调用类方法时不是函数

调用函数时出现“不是'subtype'错误”

AngularFire httpsCallable Object(...)不是一个函数

Firebase httpsCallable 与“允许未经身份验证”的云函数

调用模拟器函数时 Firebase 函数内部错误

(..)。then不是函数,firebase云函数

仅当从apply调用函数时才评估函数,而不是从apply_async调用函数时才评估函数

Firebase 函数 - 函数未被调用

从Firebase Cloud函数调用函数

Firebase refFromURL 不是函数

Firebase不是构造函数

firebase .then()不是函数

TypeError:Object(...)不是函数,正在从Firebase调用数据

在我创建的新函数中调用我创建的函数时,如何修复不是函数错误

从Firebase函数调用AppEngine

Firebase函数未被调用

尝试调用 API 端点时 Next 不是函数

当在canvas上调用canvas.getContext时不是函数

TypeError:调用Graphql突变时obj.hasOwnProperty不是函数

当远程方法递归调用自身时,回调不是函数

尝试遍历Firebase结果集时,forEach不是函数:

调用函数时变量