在Firebase函数admin SDK中找不到服务帐户

时间:2018-08-08 03:52:01

标签: node.js firebase firebase-realtime-database google-cloud-functions firebase-admin

我正在尝试在我的functions文件夹中初始化firebase admin sdk,以便我的云函数可以通过admin读/写访问权限来访问我的数据库,但是当我尝试部署我的函数时,会返回以下错误

错误:错误分析触发条件:找不到模块'/serviceKey.json'

我尝试在functions目录中运行npm install,但没有帮助。

这是我的package.json文件

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "serve": "firebase serve --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "dependencies": {
    "cors": "^2.8.4",
    "express": "^4.16.3",
    "firebase": "^5.3.1",
    "firebase-admin": "^5.13.1",
    "firebase-functions": "^2.0.2"
  },
  "private": true
}

这是我的index.js文件

{
    const functions = require('firebase-functions');
    const express = require('express');

    const cors = require('cors')({origin: true});

    var firebase = require("firebase");


    var admin = require("firebase-admin");

    require("firebase/auth");
    require("firebase/database");
    //require("firebase/firestore");
    //require("firebase/messaging");
    require("firebase/functions");


    var serviceAccount = require("/serviceKey.json");


    // Initialize the app with a service account, granting admin 
    privileges
    admin.initializeApp({
      credential: admin.credential.cert(serviceAccount),
      databaseURL: "https://<database name>.firebaseio.com"
    });

    const displayqr = express();
    const geturl = express();


    displayqr.get('/displayqr', (request, response) => {
         console.log("response sent");
            response.send("testio/qrdisplay.html");
        });




     exports.displayqr = functions.https.onRequest(displayqr);



     exports.geturl = functions.https.onCall((email) => {// get url 
    function
        });
}

3 个答案:

答案 0 :(得分:1)

您将放入与index.js相同的文件夹中,然后说

var serviceAccount = require("./myfirebaseapp-firebase-adminsdk-my-secret-key.json");

然后您admin.initializeApp

答案 1 :(得分:1)

就我而言,我在项目的根目录下有一个service-account文件。它可以在本地工作,但是部署它是一个问题。

../service-account.json  (Root)

对我有用的东西

如果是Node App,请将文件从项目的根目录移到functions目录,因为firebase会将文件托管在不同的位置

./service-account.json  (Inside functions directory)

答案 2 :(得分:0)

将json文件放到lib文件夹中对我有用(functions \ lib),我认为当我使用Typescript时,firebase将从lib文件中部署javascript函数,因此它将在lib文件夹中查找json文件