无法将RSA私钥设置为config var

时间:2017-06-05 02:09:53

标签: heroku

我正在尝试将Express应用程序部署到Heroku。我遇到的麻烦是Heroku或其他方面的东西搞砸了RSA私钥字符串的格式。我在我的hadoop fs -chmod 777 /user 中有以下内容,它在本地工作,并且不在git中:

.env

我最初使用https://github.com/xavdid/heroku-config来设置上述变量,而不是通过Heroku上的仪表板手动执行,但该私钥失败。

然后我尝试通过Heroku Dashboard通过复制/粘贴(不带双引号)手动设置该值,但仍然失败。

最后我通过TYPE= PROJECT_ID= PRIVATE_KEY_ID= PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n" CLIENT_EMAIL= CLIENT_ID= AUTH_URI= TOKEN_URI= AUTH_CERT_URL= CLIENT_CERT_URL= 设置了值,但在应用启动时仍无法解析它。

我甚至尝试将heroku config:set替换为\n,因为有人here并使用'\n'引号,但仍无效。

所以我的问题是,Heroku是否用长串值做了一些时髦的东西?或者我错过了什么。调用/使用上述值,如下所示:

heroku config:set PRIVATE_KEY=""

来自Heroku的日志:

const { credential } = require('firebase-admin')

exports.serviceAccount = {
  type: process.env.TYPE,
  project_id: process.env.PROJECT_ID,
  private_key_id: process.env.PRIVATE_KEY_ID,
  private_key: process.env.PRIVATE_KEY,
  client_email: process.env.CLIENT_EMAIL,
  client_id: process.env.CLIENT_ID,
  auth_uri: process.env.AUTH_URI,
  token_uri: process.env.TOKEN_URI,
  auth_provider_x509_cert_url: process.env.AUTH_CERT_URL,
  client_x509_cert_url: process.env.CLIENT_CERT_URL
}

exports.credential = credential.cert(exports.serviceAccount)

exports.databaseURL = process.env.DATABASE_URL

exports.adminConfig = {
  credential: exports.credential,
  databaseURL: exports.databaseURL
}

2 个答案:

答案 0 :(得分:28)

我能够使用我发现here的评论建议来解决我的问题。

因此,在应用程序的Heroku仪表板上,我将PRIVATE_KEY值设置为双引号:

private key screenshot

然后我改变了

private_key: process.env.PRIVATE_KEY

private_key: JSON.parse(process.env.PRIVATE_KEY)

最后通过git push heroku master重新部署,应用程序启动正常。

2018-10-27:上述链接的评论现已消失。但本质上,评论者提到字符串实际上是一个JSON字符串,需要将其解析回String

答案 1 :(得分:1)

您的.env中的密钥必须像这样
'"[PRIVATE_KEY]"'同时包裹在一个和两个qout中,这实际上与您调用heroku时得到的格式相同命令
$ heroku config:get PRIVATE_KEY -s >> .env
要在JSON.parse中添加更多内容,以防万一,您仍然可以在这里找到错误:
Node.js -Firebase Service Account Private Key won't parse

因此,从该页面返回后,最终代码行将如下所示: JSON.parse(process.env.PRIVATE_KEY).replace(/\\n/g, '\n')