小编the*_*jay的帖子

将 X.509 私钥存储在 Vercel 上的环境变量中并在 Nextjs 中使用它的正确方法是什么?

设置

我有一个 Nextjs 应用程序,它使用 Firebase Admin 并需要私钥来初始化自身。它是一个 X.509 私钥证书,为了安全起见,我尝试将其存储在 Vercel(我的托管选择)上的环境变量中。

我的文件中有环境变量.env.local,如 nextjs文档中所述。由于有几个 地方描述了 Vercel 未正确存储“原始”存储的私钥,但它们可以正确存储为 JSON 并稍后由应用程序解析,因此我已经这样做了。事实上,测试按原样存储私钥是行不通的,并且在此github 问题上描述的两种方法中的任何一种中存储/解析私钥都可以在本地与我的变量一起使用,.env.local如下所示:

EXAMPLE_KEY=example_value
FIREBASE_PRIVATE_KEY='"-----BEGIN PRIVATE KEY-----\WdEFiwPk...   ...htJthGef\n-----END PRIVATE KEY-----\n"'
Run Code Online (Sandbox Code Playgroud)

问题

尝试将这些更改部署到 Vercel 失败了,调查原因似乎指向 Vercel 上以奇怪方式存储的环境变量。

使用 Vercel cli 添加变量,然后提供文本将始终将提供的值用双引号引起来:

如果您vercel env add FIREBASE_PRIVATE_KEY输入true该值,然后运行vercel env pull <filename>,该文件将包含:

FIREBASE_PRIVATE_KEY="true"
Run Code Online (Sandbox Code Playgroud)

通常这可能不是问题,但由于私钥有双引号括起来,因此提交值“raw”然后将其拉回本地文件如下所示:

FIREBASE_PRIVATE_KEY=""-----BEGIN PRIVATE KEY-----\WdEFiwPk...   ...htJthGef\n-----END PRIVATE KEY-----\n""
Run Code Online (Sandbox Code Playgroud)

并尝试在 JSON 可解析的单引号字符串中提交它,返回:

FIREBASE_PRIVATE_KEY="'"-----BEGIN PRIVATE KEY-----\WdEFiwPk...   ...htJthGef\n-----END PRIVATE KEY-----\n"'"
Run Code Online (Sandbox Code Playgroud)

我认为这可能就是从 Vercel 提取数据时的格式化方式,但它与我从应用程序中看到的错误消息一致。

我已经尝试了几乎所有组合和配置来尝试获得JSON.parse …

next.js vercel

3
推荐指数
1
解决办法
2190
查看次数

标签 统计

next.js ×1

vercel ×1