繁体   English   中英

如何在 Next Js 中隐藏 firebase-admin 凭据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM