Firebase REST API 401 未授权除我之外的所有人

Firebase REST API 401 unauthorized for everyone but me

我正在使用 firebase 的实时数据库来存储数据,我将权限规则设置为:

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid",
        ".read": "$uid === auth.uid"
      }
    }
  }
}

我正在尝试使用 rest/fetch 读取和写入数据库,它似乎工作正常。但经过一些调查,它似乎只对我有效,其他用户收到 401 unauthorized 响应。我的代码看起来像

chrome.identity.getAuthToken({ interactive: true }, (token) => {
    let url = this.url + `users/${id}.json?access_token=${token}`;
    const headers = new Headers({
      "Content-Type": "application/json",
    });

    fetch(url, { headers: headers })
      .then((res) => {
        console.log(res);
        return res.json();
      })
  });

Token是在插件后台调用getAuthToken获得的。通过调用 chrome.identity.getProfileUserInfo:

找到 id
chrome.identity.getProfileUserInfo((info) => {
      email = info.email;
      userId = info.id;
    });

我还有以下范围,我认为可以从 firebase 读取和写入:https://www.googleapis.com/auth/datastore

有什么想法吗?我很困惑为什么它会起作用,但只对我有用。

来自 generating an access token to access the Realtime Database REST API 上的 Firebase 文档:

generate a Google OAuth2 access token with the following required scopes:

您很可能错过了第二个范围。

顺便请注意,这将授予您对数据库的完全管理访问权限,并且不会遵循您的安全规则。这些人本质上是您项目的合作者:他们要么可以 see/edit 所有数据,要么不能。

要允许用户访问数据库 并且 遵循安全规则,用户必须使用 Firebase 身份验证登录,并且您必须传递他们的 ID 令牌到 REST API.