首页 > 解决方案 > firebase.initializeApp 在我的 dotenv 文件中找不到 API 密钥。(Next.js)

问题描述

我正在尝试在我的 Next.js 项目中实现 Firebase Auth。auth 系统工作得很好,但只有当我直接在initializeApp中声明API 密钥时。例如:

import firebase from 'firebase/app'
import 'firebase/auth'

const app = !firebase.apps.length ? (
    firebase.initializeApp({
        apiKey: 'MY_KEY',
        authDomain: process.env.FIREBASE_DOMAIN,
        projectId: process.env.FIREBASE_PROJECT_ID,
        storageBucket: process.env.FIREBASE_SOTORAGE_BUCKET,
        messagingSenderId: process.env.FIREBASE_SENDER_ID,
        appId: process.env.FIREBASE_ID,
        measurementId: process.env.FIREBASE_MESUREMENT_ID,
    }) 
) : (firebase.app())

export default app

当我尝试使用.env文件获取 API 密钥时,next.js 抛出以下错误:“未处理的运行时错误错误:您的 API 密钥无效,请检查您是否正确复制了它。”

我还尝试通过在next.config.js中添加 env 配置来添加这些变量,就像 Vercel 的建议https://nextjs.org/docs/api-reference/next.config.js/environment-variables一样。它也没有工作。

我当前的代码是这样的:

import firebase from 'firebase/app'
import 'firebase/auth'

const app = !firebase.apps.length ? (
    firebase.initializeApp({
        apiKey: process.env.FIREBASE_KEY,
        authDomain: process.env.FIREBASE_DOMAIN,
        projectId: process.env.FIREBASE_PROJECT_ID,
        storageBucket: process.env.FIREBASE_SOTORAGE_BUCKET,
        messagingSenderId: process.env.FIREBASE_SENDER_ID,
        appId: process.env.FIREBASE_ID,
        measurementId: process.env.FIREBASE_MESUREMENT_ID,
    }) 
) : (firebase.app())

export default app

我应该怎么做才能使initializeApp能够读取process.env.FIREBASE_KEY值?

标签: javascriptnode.jsfirebasegoogle-cloud-functionsnext.js

解决方案


Firebase CLI 不支持部署添加环境变量的函数。您在任何 .env 文件中拥有什么并不重要——部署后它们根本不会出现在流程环境中。

文档中解释了为您的函数提供配置参数的文档化方式。这些变量不会在 process.env 中显示为进程环境。它们将出现在functions.config()运行时返回的对象中。

如果您确实必须拥有进程环境变量,那么您将无法使用 .env 中的任何内容。您可以改为使用 gcloud 来编写和部署您的函数来指定 environment。但是,这会让您失去使用 Firebase CLI 的所有好处,因为它是一个完全不同的部署工具。

您还可以使用 Firebase CLI 进行部署,然后在使用 gcloud 部署后更新特定环境。

最重要的是,您尝试做的事情并不是非常简单或直接。我建议学习如何使用 Firebase 提供的配置来简化此操作,但这意味着您必须将 .env 中的内容复制到其配置系统中。


推荐阅读