【问题标题】:How to configure google service key json file using .env configuration如何使用 .env 配置配置谷歌服务密钥 json 文件
【发布时间】:2020-05-27 20:10:49
【问题描述】:

我正在使用 google 服务 api 密钥在 nodejs 中创建一个 web 服务,并且在开发阶段我已经将文件放在本地并像这样进行测试......一切都很好。

现在我必须在 firebase 中进行部署,并且必须使配置文件不可见。 你有经验如何使用 .env 文件来做这个吗?

配置文件是这样的:

{
  "type": "service_account",
  "project_id": "xxxx-eeee",
  "private_key_id": "xxxw342234",
  "private_key": "-----BEGIN PRIVATE KEY-----client_id": "xxxxxxxxxxxx",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/xxxxxxxxxxxxxxxx.iam.gserviceaccount.com"
}

现在我使用此代码访问文件:

const translate = new Translate(
    {
        projectId: 'my-project-0o0o0o0o'
        keyFilename: './my-project.json
    }
);

谁能帮助我完成访问该文件的步骤,而无需在 github 然后在 firebase 中发布凭据

2020 年 2 月 13 日更新

我创建了 .env 文件来存储我的凭据,如下所示:

 SEPA_TRANSLATE_PROJECT_ID="4354-4545"
    SEPA_TRANSLATE_GOOGLE_API_KEY_TYPE="service_account"
    SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_PRIVATE_KEY_ID="43434"
    SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMM=\n-----END PRIVATE KEY-----\n"

    SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_CLIENT_EMAIL="googletranslateaaaaapi@aaaaa-aaaa.iam.gserviceaccount.com"
    SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_CLIENT_ID="34234"
    SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_AUTH_URI="https://accounts.google.com/o/oauth2/auth"
    SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_TOKEN_URI="https://oauth2.googleapis.com/token"
    SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_AUTH_PROVIDER_X509_CERT_URL="https://www.googleapis.com/oauth2/v1/certs"
    SEPA_TRANSLATE_GOOGLE_SERVICE_CLIENT_X509_CERT_URL="https://www.googleapis.com/robot/v1/metadata/x509/googletranslatewerwer%erwerwre-werwr.iam.gserviceaccount.com"

现在 my-project.json 文件看起来像:

{
      "type": process.env.SEPA_TRANSLATE_GOOGLE_API_KEY_TYPE,
      "project_id": process.env.SEPA_TRANSLATE_PROJECT_ID,
      "private_key_id": process.env.SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_PRIVATE_KEY_ID,
      "private_key": process.env.SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_PRIVATE_KEY
      "client_email": process.env.SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_CLIENT_EMAIL,
      "client_id": process.env.SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_CLIENT_ID,
      "auth_uri": process.env.SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_AUTH_URI,
      "token_uri": process.env.SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_TOKEN_URI,
      "auth_provider_x509_cert_url":process.env.SEPA_TRANSLATE_GOOGLE_SERVICE_KEY_AUTH_PROVIDER_X509_CERT_URL,
      "client_x509_cert_url": process.env.SEPA_TRANSLATE_GOOGLE_SERVICE_CLIENT_X509_CERT_URL
    }

这个 json 被称为:

 const translate = new Translate(
        {
            projectId: 'my-project-0o0o0o0o'
            keyFilename: './my-project.json
        }
    );

当我测试我的 api 时,我现在收到此错误消息:错误翻译文本:SyntaxError: Unexpected token p in JSON at position 13

【问题讨论】:

    标签: firebase github environment-variables google-cloud-functions


    【解决方案1】:

    您不应该在 firebase 云函数上使用 .env 文件,并且不能使用 环境数据,如 json 文件中的 process.env.xxxx

    您应该为 firebase 云功能使用环境配置。

    • 要存储环境数据,可以使用firebase functions:config:set 命令。
    • 要获取环境数据,可以使用functions.config()函数。
    • 本地设置文件为.runtimeconfig.json,存储环境数据后运行firebase functions:config:get > .runtimeconfig.json。(firebase functions:config:set命令)

    见:

    如果您只想使用 translate API,则不需要 keyFilename 并且不要自己制作 .env 文件。

    您应该使用 firebase 服务帐户设置 translate API 身份验证。

    要运行本地,您应该将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含服务帐户密钥的服务帐户 JSON 文件的路径。

    export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

    见:

    你能尝试翻译样本吗?

    【讨论】:

    • 是的,我正在使用云,但是你有关于 .env 文件的说明...如何访问这个文件而不是公开?
    • 我编辑了我的答案。但我的回答可能是错误的。你能试试吗?
    • 我再次更新了我的问题...仅使用一个变量似乎很容易...但是在我的情况下,当我有一个 json 文件要存储在 env 中时,我无法做到...不是为我工作:(我可以弄清楚出了什么问题
    • 我编辑了我的答案。您可以尝试翻译样本吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2016-09-02
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多