Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 不使用env vars读取Heroku上的机密配置文件_Node.js_Heroku_Google Cloud Platform_Google Cloud Pubsub - Fatal编程技术网

Node.js 不使用env vars读取Heroku上的机密配置文件

Node.js 不使用env vars读取Heroku上的机密配置文件,node.js,heroku,google-cloud-platform,google-cloud-pubsub,Node.js,Heroku,Google Cloud Platform,Google Cloud Pubsub,我使用的是NodeJS。我正在使用Heroku运行我的服务器 节点JS+Pub子页面上的示例代码要求我指定文件的路径: pubsub = gcloud.pubsub({ projectId: 'my-project', keyFilename: '/path/to/keyfile.json' }); 我通常使用Heroku的配置变量来存储机密和API密钥,但在这种情况下,GCloud API似乎需要指定文件路径。所以,我需要将一个文件签入Heroku,而不是我的GitHub r

我使用的是NodeJS。我正在使用Heroku运行我的服务器

节点JS+Pub子页面上的示例代码要求我指定文件的路径:

pubsub = gcloud.pubsub({
    projectId: 'my-project',
    keyFilename: '/path/to/keyfile.json'
});
我通常使用Heroku的配置变量来存储机密和API密钥,但在这种情况下,GCloud API似乎需要指定文件路径。所以,我需要将一个文件签入Heroku,而不是我的GitHub repo

我尝试过以下方法:但问题是,一旦我强制添加(
git add-f keyfile.json
)json文件并对其进行提交并创建新分支,我就无法将该提交推送到Heroku,因为当我执行
git push Heroku master
时,它会说
一切都是最新的。无论如何,这看起来很混乱。必须有一种更干净的方法让谷歌云与Heroku一起工作


我该怎么办?

谷歌云平台上可爱的人们回答说:

文档中的代码示例中没有提到它,但您只需添加一个credentials对象并将其传递到配置中即可。凭据对象可以读取环境变量

更多信息请点击此处:https://googlecloudplatform.github.io/gcloud-node/#/authorization.
更新链接:

不是针对nodejs,而是针对GO(GOLANG)保留每个字段值作为环境变量中的一个单独键,然后需要执行类似操作,创建结构,转换为json(将私钥中的每个
\\n
替换为
\n
),输入选项。带凭证JSON

type credentialsData struct {
    Type                    string `json:"type"`
    ProjectId               string `json:"project_id"`
    PrivateKeyId            string `json:"private_key_id"`
    PrivateKey              string `json:"private_key"`
    ClientEmail             string `json:"client_email"`
    ClientId                string `json:"client_id"`
    AuthUri                 string `json:"auth_uri"`
    TokenUri                string `json:"token_uri"`
    AuthProviderX509CertUrl string `json:"auth_provider_x509_cert_url"`
    ClientX509CertUrl       string `json:"client_x509_cert_url"`
}

func firebase_init() *firebase.App {
    backSlashFix := strings.Replace(os.Getenv("FIREBASE_PRIVATE_KEY"), "\\n", "\n", -1)
    json_cred := &credentialsData{
        Type:                    os.Getenv("FIREBASE_ACCOUNT_TYPE"),
        ProjectId:               os.Getenv("FIREBASE_PROJECT_ID"),
        PrivateKeyId:            os.Getenv("FIREBASE_PRIVATE_KEY_ID"),
        PrivateKey:              backSlashFix,
        ClientEmail:             os.Getenv("FIREBASE_CLIENT_EMAIL"),
        ClientId:                os.Getenv("FIREBASE_CLIENT_ID"),
        AuthUri:                 os.Getenv("FIREBASE_AUTH_URI"),
        TokenUri:                os.Getenv("FIREBASE_TOKEN_URI"),
        AuthProviderX509CertUrl: os.Getenv("FIREBASE_AUTH_PROVIDER_X509_CERT_URL"),
        ClientX509CertUrl:       os.Getenv("FIREBASE_CLIENT_X509_CERT_URL"),
    }

    bytes, e := json.Marshal(json_cred)
    if e != nil {
        panic(fmt.Errorf("Could not create json from credentials struct", e))
    }
    opt := option.WithCredentialsJSON([]byte(string(bytes)))
    app, err := firebase.NewApp(context.Background(), &firebase.Config{ProjectID: "<your project id>"}, opt)
    if err != nil {
        panic(fmt.Errorf("error initializing app: %v", err))
    }

    return app
}
类型credentialsData结构{
类型字符串`json:“类型”`
ProjectId字符串`json:“项目id”`
PrivateKeyId字符串`json:“private\u key\u id”`
PrivateKey字符串`json:“私钥”`
ClientEmail字符串`json:“客户端电子邮件”`
ClientId字符串`json:“客户端id”`
AuthUri字符串`json:“auth_uri”`
TokenUri字符串`json:“token_uri”`
AuthProviderX509CertUrl字符串`json:“auth\u provider\u x509\u cert\u url”`
ClientX509CertUrl字符串`json:“客户端\u x509\u证书\u url”`
}
func firebase_init()*firebase.App{
反斜杠:=strings.Replace(os.Getenv(“FIREBASE\u私钥”),“\\n”,“\n”,-1)
json_cred:=&credentialsData{
类型:os.Getenv(“FIREBASE\u帐户\u类型”),
ProjectId:os.Getenv(“FIREBASE项目ID”),
PrivateKeyId:os.Getenv(“FIREBASE\u PRIVATE\u KEY\u ID”),
私钥:反斜杠,
客户邮箱:os.Getenv(“FIREBASE\u客户端\u电子邮件”),
ClientId:os.Getenv(“FIREBASE\u客户端\u ID”),
AuthUri:os.Getenv(“FIREBASE\u AUTH\u URI”),
TokenUri:os.Getenv(“FIREBASE_TOKEN_URI”),
AuthProviderX509CertUrl:os.Getenv(“FIREBASE\u AUTH\u PROVIDER\u X509\u CERT\u URL”),
ClientX509CertUrl:os.Getenv(“FIREBASE\u客户端\u X509\u证书\u URL”),
}
字节,e:=json.Marshal(json\u cred)
如果e!=nil{
恐慌(fmt.Errorf(“无法从凭证结构创建json”,e))
}
opt:=option.WithCredentialsJSON([]字节(字符串(字节)))
app,err:=firebase.NewApp(context.Background(),&firebase.Config{ProjectID:},opt)
如果错误!=零{
死机(fmt.Errorf(“初始化应用程序时出错:%v”,错误))
}
返回应用程序
}
此链接似乎已关闭:重定向到通用页面: