【问题标题】:Firebase REST API 401 unauthorized for everyone but meFirebase REST API 401 未经授权,除我之外的所有人
【发布时间】:2022-02-02 07:57:23
【问题描述】:

我正在使用 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获取的。 id是通过调用chrome.identity.getProfileUserInfo找到的:

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

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

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

【问题讨论】:

  • 这可能取决于变量idtoken 是如何初始化的。您可以编辑您的问题以显示这一点吗? --- 请注意,范围 https://www.googleapis.com/auth/datastore 与 Firebase 实时数据库无关。
  • 感谢弗兰克的输入,我已经更新了我如何获得idtoken 的问题。我这里的方法不正确吗?感谢帮助
  • 我回答了我对下面发生的事情的最佳猜测,所以让我们继续下去吧????
  • 嘿@JesseSliter。有更新吗?
  • 抱歉回复缓慢。我 95% 确定您的答案是正确的,并且我需要重构我的代码以使用 firebase auth。我只是还没有解决它。同时,我会继续将您的回复标记为已接受的答案,如果出于某种原因不正确,请进行更改。

标签: javascript rest firebase-realtime-database oauth google-api-js-client


【解决方案1】:

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

生成具有以下所需范围的 Google OAuth2 访问令牌:

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

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

要允许用户访问数据库遵守安全规则,用户必须使用 Firebase 身份验证登录,并且您必须将其 ID 令牌传递给 REST API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2021-04-07
    • 2016-02-09
    • 2021-04-13
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多