![](/img/trans.png)
[英]How to query Firebase with Node.js and "firebase-admin" SDK?
[英]How to hide firebase-admin credentials in Next Js
所以我在 Next Js 中使用 firebase-admin。 我使用了环境变量,但无法隐藏 firebase 服务帐户密钥,因为它们没有在 Next JS 的服务器端定义。 所以我不得不使用 NEXT_PUBLIC 环境变量。 并且可以在客户端访问和查看 NEXT_PUBLIC 环境变量。
这是我的 firebase-admin 文件
const firebase = require("firebase-admin");
const { fireStore, getFirestore } = require("firebase-admin/firestore");
import { adminConfig } from "./serviceAccountKey";
if (!firebase.apps.length) {
firebase.initializeApp({
credential: firebase.credential.cert(adminConfig),
});
}
export const db = getFirestore();
export default firebase;
这就是我的配置 object 的样子。
export const adminConfig = {
type: process.env.NEXT_PUBLIC_FIREBASE_TYPE,
project_id: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
private_key_id: process.env.NEXT_PUBLIC_FIREBASE_PRIVATE_KEY_ID,
private_key: process.env.NEXT_PUBLIC_FIREBASE_PRIVATE_KEY,
client_email: process.env.NEXT_PUBLIC_FIREBASE_CLIENT_EMAIL,
client_id: process.env.NEXT_PUBLIC_FIREBASE_CLIENT_ID,
auth_uri: process.env.NEXT_PUBLIC_FIREBASE_AUTH_URI,
token_uri: process.env.NEXT_PUBLIC_FIREBASE_TOKEN_URI,
auth_provider_x509_cert_url:
process.env.NEXT_PUBLIC_FIREBASE_AUTH_PROVIDER_CERT_URL,
client_x509_cert_url: process.env.NEXT_PUBLIC_FIREBASE_CLIENT_CERT_URL,
};
那么如何隐藏配置数据。 或者即使是公开的也没关系?
一段时间前我设法在 NextJS 中做到了这一点(希望它仍然相关) - 试试这个:
将您的秘密作为环境变量存储在.env
文件中。
在你的next.config.js
中加载publicRuntimeConfig
中的环境变量
publicRuntimeConfig: {
PRIVATE_KEY: process.env.FIREBASE_PRIVATE_KEY_ID,
PRIVATE_KEY_ID: process.env.FIREBASE_PRIVATE_KEY
}
然后在你的客户端反应:
import getConfig from 'next/config';
const {publicRuntimeConfig} = getConfig();
const private_key = publicRuntimeConfig.PRIVATE_KEY
const private_key_id = publicRuntimeConfig.PRIVATE_KEY_ID
编辑:实际上,现在我考虑了一下,我将这种方法用于不需要绝对安全的事情,比如 API_URIs。
像这样存储/访问的秘密仍然会在浏览器中接受检查。
对于需要安全存储秘密的任何事情,一定要在服务器端执行它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.