设置
我有一个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... ...htJthGefn-----END PRIVATE KEY-----n"'
问题
试图将这些更改部署到Vercel的尝试失败了,而调查原因似乎指向了以更温和的方式存储在Vercel上的环境变量。
使用Vercel cli添加变量,然后提供文本,将始终用双引号包装提供的值:
如果您为该值输入CCD_ 3和CCD_,然后运行vercel env pull <filename>
,文件将包含:
FIREBASE_PRIVATE_KEY="true"
这在正常情况下可能不是问题,但由于私钥具有双引号,因此提交值";生的";然后将其拉回到本地文件,看起来像:
FIREBASE_PRIVATE_KEY=""-----BEGIN PRIVATE KEY-----WdEFiwPk... ...htJthGefn-----END PRIVATE KEY-----n""
尝试在JSON可解析的单引号字符串中提交时返回:
FIREBASE_PRIVATE_KEY="'"-----BEGIN PRIVATE KEY-----WdEFiwPk... ...htJthGefn-----END PRIVATE KEY-----n"'"
我以为从Vercel提取数据时可能就是这样格式化的,但它与我从应用程序中看到的错误消息一致。
我尝试了几乎所有的组合和配置,试图获得一个JSON.parse
可用的私钥,但似乎无法使其工作。我甚至尝试删除包装privateKey
的双引号,看看是否会添加明显添加的双引号并在那里工作,但没有骰子。
信用:https://gist.github.com/tomi/0675e58919af4554b198cee3f84405e5
将私钥编码为base64:
- 将私钥复制到剪贴板
- 运行命令
pbpaste | base64 | pbcopy
私钥现在在剪贴板中以base64编码。将其粘贴到env变量,例如粘贴到heroku或.env文件
从node.js中的base64解码私钥
const private_key=新缓冲区(process.env.private_key,'base64'(.toString('scii'(;
相信您可以从开头和结尾删除--private key---部分,只需使用中间的值。
更改
private_key:process.env.GCLOUD_private_key
通过
private_key:process.env.GCLOUD_private_key.replace(/\n/g,'\n'(
源