如何在不使用(已弃用)数据库机密的情况下将 Firebase 集成到 Google Apps 脚本中

Muh*_*leh 4 google-apps-script firebase firebase-realtime-database

不久前,我使用Google Apps Script 中的 Firebase 集成作为服务器端,它运行良好,并且仍在我的旧项目中运行。

但是今天,在创建了一个新的 Firebase 项目和一个新的实时数据库,然后尝试将 Firebase 项目集成到我的Google Script 项目中后,我遇到了一个错误,并且无法完全正常工作。我意识到Firebase 弃用了新项目的数据库机密。

所以,我现在的问题是如何解决这个问题?还有另一种方法可以将 Firebase 集成到 Google Script 项目中吗?

Fra*_*len 6

您需要将正确的 OAuth 范围添加到您的 Apps 脚本项目的清单文件中,然后传入一个access_token参数(或在Authorization标头中)而不是auth您当前使用的参数。

基于Doug 在这里的要点,基本步骤是:

  1. manifest.json通过单击View>从脚本编辑器打开Show manifest file。
  2. 添加或编辑清单以具有以下 OAuth 范围:

    "oauthScopes": [
      "https://www.googleapis.com/auth/userinfo.email",
      "https://www.googleapis.com/auth/firebase.database",
      "https://www.googleapis.com/auth/script.external_request",
      "https://www.googleapis.com/auth/spreadsheets"
    ]
    
    Run Code Online (Sandbox Code Playgroud)

    最后一个范围授予它访问电子表格本身的权限。如果您使用其他 GSuite 类型(文档、幻灯片、表单等),您将需要与类型对应的范围。

  3. 现在您可以从脚本中获取 OAuth 令牌并将其添加到您的请求中:

    var response = UrlFetchApp.fetch(databaseUrl, {
      method: "PUT",
      headers: {
        "Content-type": "application/json",
        "Authorization": "Bearer "+ScriptApp.getOAuthToken()
      },
      payload: JSON.stringify(json)
    });
    Logger.log(response.getContentText());
    
    Run Code Online (Sandbox Code Playgroud)

这样做的一个主要优点是您的脚本现在将以实际用户身份运行,这意味着您可以确保它只能通过安全规则执行授权操作。