在 firebase 函数 admin sdk 中找不到服务帐户
cannot find service account in firebase functions admin sdk
我正在尝试在我的函数文件夹中初始化 firebase admin sdk,以便我的云函数可以使用管理员 read/write 访问权限访问我的数据库,但是当我尝试部署我的函数时,返回以下错误
错误:解析触发器时出错:找不到模块“/serviceKey.json”
我已经尝试 运行 在函数目录中安装 npm,但它没有帮助。
这是我的 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
});
}
您将 index.js
放在与您的 index.js
相同的文件夹中并说
var serviceAccount = require("./myfirebaseapp-firebase-adminsdk-my-secret-key.json");
然后你 admin.initializeApp
在我的例子中,我在项目的根目录下有 service-account
文件。它在本地工作,但部署它是一个问题。
../service-account.json (Root)
对我有用的:
如果是 Node 应用程序,请将文件从项目的根目录移动到函数目录,因为 firebase 会将文件托管在不同的位置
./service-account.json (Inside functions directory)
将 json 文件放入 lib 文件夹对我有用(functions\lib),我认为当我使用 typescript 时,firebase 将从 lib 文件部署 javascript 函数,因此它看起来对于 lib 文件夹中的 json 个文件
我正在尝试在我的函数文件夹中初始化 firebase admin sdk,以便我的云函数可以使用管理员 read/write 访问权限访问我的数据库,但是当我尝试部署我的函数时,返回以下错误
错误:解析触发器时出错:找不到模块“/serviceKey.json”
我已经尝试 运行 在函数目录中安装 npm,但它没有帮助。
这是我的 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
});
}
您将 index.js
放在与您的 index.js
相同的文件夹中并说
var serviceAccount = require("./myfirebaseapp-firebase-adminsdk-my-secret-key.json");
然后你 admin.initializeApp
在我的例子中,我在项目的根目录下有 service-account
文件。它在本地工作,但部署它是一个问题。
../service-account.json (Root)
对我有用的:
如果是 Node 应用程序,请将文件从项目的根目录移动到函数目录,因为 firebase 会将文件托管在不同的位置
./service-account.json (Inside functions directory)
将 json 文件放入 lib 文件夹对我有用(functions\lib),我认为当我使用 typescript 时,firebase 将从 lib 文件部署 javascript 函数,因此它看起来对于 lib 文件夹中的 json 个文件