javascript - 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值?
解决方案
Firebase CLI 不支持部署添加环境变量的函数。您在任何 .env 文件中拥有什么并不重要——部署后它们根本不会出现在流程环境中。
文档中解释了为您的函数提供配置参数的文档化方式。这些变量不会在 process.env 中显示为进程环境。它们将出现在functions.config()
运行时返回的对象中。
如果您确实必须拥有进程环境变量,那么您将无法使用 .env 中的任何内容。您可以改为使用 gcloud 来编写和部署您的函数来指定 environment。但是,这会让您失去使用 Firebase CLI 的所有好处,因为它是一个完全不同的部署工具。
您还可以使用 Firebase CLI 进行部署,然后在使用 gcloud 部署后更新特定环境。
最重要的是,您尝试做的事情并不是非常简单或直接。我建议学习如何使用 Firebase 提供的配置来简化此操作,但这意味着您必须将 .env 中的内容复制到其配置系统中。
推荐阅读
- ruby-on-rails - 如何在 mongodb 的 Rails 中编写 LIKE 语句
- python-3.x - SQLAlchemy-Flask 绑定不起作用 - NameError: name 'TABLE' is not defined
- python - Python 是否会垃圾收集在函数范围内不再引用的变量?
- r - 在 R 中将大型 XML 解析为数据框
- javascript - 如何从 mongodb 获取值并在 HTML 中显示
- python-3.x - 计算 DataFrame 中的分类值
- java - 无法使用 selenium headless chrome 下载 docx 文件
- ios - 除了 Apple 商店,还有其他方法可以发布 iOS 应用程序吗?
- firebase - 我的 OTP 在调试 apk 中使用 android 在 firebase 中运行良好,但在发布时无法运行
- c# - 是否可以参数化 QueueTrigger 名称?