代码之家  ›  专栏  ›  技术社区  ›  Chadd Yasin Özcan

Firebase Environmental Config-为私钥添加了斜杠

  •  0
  • Chadd Yasin Özcan  · 技术社区  · 7 年前

    目标

    我正在更新服务帐户密钥并将它们存储为Firebase环境变量。

    错误

    当我跑的时候 firebase deploy --only functions 我懂了:

    Silver-Sliver:Issy dchaddportwine$ firebase deploy --only functions
    
    === Deploying to 'development-is'...
    
    i  deploying functions
    i  functions: ensuring necessary APIs are enabled...
    ✔  functions: all necessary APIs are enabled
    i  functions: preparing functions directory for uploading...
    
    Error: Error occurred while parsing your function triggers.
    
    Error: Failed to parse private key: Error: Invalid PEM formatted message.
    

    发行

    正在更新 firebase functions:config:set 引入额外的 \ 字符串中的字符。这是我申请后在终端看到的 :set private_key_id . 看到额外的反斜杠了吗 \n 变成 \\n ?

    Silver-Sliver:Issy dchaddportwine$ firebase functions:config:set service_account.private_key_id="-----BEGIN PRIVATE KEY-----\nMIIE...L5A==\n-----END PRIVATE KEY-----\n"
    ✔  Functions config updated.
    
    Please deploy your functions for the change to take effect by running firebase deploy --only functions
    
    Silver-Sliver:Issy dchaddportwine$ firebase functions:config:get
    {
      "service_account": {
        "private_key_id": "-----BEGIN PRIVATE KEY-----\\nMIIE...L5A==\\n-----END PRIVATE KEY-----\\n",
    

    问题

    添加斜杠是一个错误,还是我的用户错误。我应该以不同的方式更新私钥id吗?我该怎么解决这个问题?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Oluwafemi Sule    7 年前

    太长,读不下去了 :用单引号和前缀将键的值括起来 $ 特殊处理。

    假设1

    新行的转义由shell程序完成。

    测试1

    创建一个脚本,记录shell中解析的参数。

    > echo "console.log(process.argv)" > shell-args.js
    

    > node shell-args.js x="Always\nEscape"
    
    [ '/Users/alẹ́tilẹ́/.nvm/versions/node/v9.10.1/bin/node',
      '/Users/alẹ́tilẹ́/Tests/shell-args.js',
      'x=Always\\nEscape' ]
    

    假设2

    echo "Always\nEscape" > always_escape
    

    > node shell-args.js x="$(< always_escape)"
    

    > node shell-args.js x="`< always_escape`"
    
    [ '/Users/alẹ́tilẹ́/.nvm/versions/node/v9.10.1/bin/node',
      '/Users/alẹ́tilẹ́/Tests/shell-args.js',
      'x=Always\nEscape' ]
    

    假设3

    当使用ansic扩展时,新行被给予特殊的处理。

    man bash

    字符串,并按指定替换反斜杠转义字符 ANSI C标准。。。

    测试3

    > node shell-args.js x=$'Always\nEscape'
    
    [ '/Users/alẹ́tilẹ́/.nvm/versions/node/v9.10.1/bin/node',
      '/Users/alẹ́tilẹ́/Tests/shell-args.js',
      'x=Always\nEscape' ]
    

    结论

    用单引号和前缀将键的值括起来 特殊处理。