我有node.js作为后端,我使用firebase和firebase-admin。当我像这样使用 firebase-admin 配置时:
import admin from "firebase-admin";
import { cert } from "firebase-admin/app";
const Service = require("../adminSDK_service.json");
const { PRIVATE_KEY, PROJECT_ID, CLIENT_EMAIL } = process.env;
const fireBase_Admin = admin.initializeApp({
credential: cert(Service),
databaseURL: process.env.DATA_BASE_URL,
});
export default fireBase_Admin;
这里一切都很好,但问题是我不知道在哪里可以保存要保护的 json 文件。
我知道解决这个问题的方法,我的意思是让 github 存储库私有,但我为我的投资组合构建这个项目,所以我希望每个人都可以看到。 然后我阅读了“cert”函数的文档,当我到达那里时,我们只需要三个参数:
import admin from "firebase-admin";
import { cert } from 'firebase-admin/app'
const Service = require("../adminSDK_service.json");
const { PRIVATE_KEY, PROJECT_ID, CLIENT_EMAIL } = process.env;
const fireBase_Admin = admin.initializeApp({
credential: cert({
privateKey: PRIVATE_KEY?.replace(/\\n/g, "\n"),
projectId: PROJECT_ID,
clientEmail: CLIENT_EMAIL,
}),
databaseURL: process.env.DATA_BASE_URL,
});
export default fireBase_Admin;
我从 env 那里设置了值,但是当我尝试登录时。我收到错误:
Invalid parent project. Either the parent project doesn't exist or didn't enable multi-tenancy.
在登录功能中,我尝试让用户检查这样的用户是否存在:
// find user
const user = await Admin.auth().getUserByEmail(email);
console.log(user);
if (!user) {
return {
status: false,
message: "error!",
};
}
当我删除它时,一切正常......所以..
所以我很困惑,如果“cert”只需要三个参数,这意味着它使用 JSON 文件中的三个值,是吗?
我也听说过Google Secret Manager,但我不明白如何使用它,如果您有任何源码或视频教程请在评论中写下
我希望你能帮助我。
愿上帝保佑!我正在使用 Nestjs,这是一个 Node.js 框架。对于必须是字符串的project_id,我有同样的错误,似乎 .env 不知道值是否是字符串,所以我必须在 .env 中调用具有正常配置的 serviceAccountKey.json Firebase SDK:
auth.service.ts
import { Injectable } from '@nestjs/common';
import * as admin from 'firebase-admin';
import { applicationDefault } from 'firebase-admin/app';
@Injectable()
export class AuthService {
private readonly firebaseAdmin: admin.app.App;
constructor() {
this.firebaseAdmin = admin.initializeApp({
credential: applicationDefault(),
});
}
main.ts
import * as dotenv from 'dotenv';
dotenv.config();
.env
GOOGLE_APPLICATION_CREDENTIALS=./serviceAccountKey.json
这对我有用