我有一个 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可用的私钥,但似乎无法使其工作。我什至尝试删除包裹的双引号privateKey,看看是否会添加明显添加的双引号并在那里工作,但没有骰子。
致谢:https://gist.github.com/tomi/0675e58919af4554b198cee3f84405e5
pbpaste | base64 | pbcopy私钥现在在剪贴板中以 base64 编码。将其粘贴到 env 变量,例如 heroku 或 .env 文件
const private_key = new Buffer(process.env.PRIVATE_KEY, 'base64').toString('ascii');
| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |