【问题标题】:Cannot fetch a Firebase Realtime Database with anonymous authentication无法使用匿名身份验证获取 Firebase 实时数据库
【发布时间】:2021-10-18 00:47:41
【问题描述】:

我正在构建一个通过 Firebase 实时数据库查找 JSON 数据库的 React Web 应用程序。无需身份验证即可获取数据!

fetch('https://my-awesome-site.firebaseio.com/database.json')
        .then(res => {
            if(!res.ok) {
                throw Error('Could not fetch data for that resource, Captain.')
            }
            return res.json();
        })
        .then(data => {
            setAwesomeData(data);
            setIsPending(false);
            setError(null);
            return data;
        })
        .catch(err => {
            setIsPending(false);
            setError(err.message);
        })

实时数据库的规则如下:

 {
  "rules": {
     ".read": "true",  
    ".write": "true"
  }
}

我现在正在尝试允许匿名身份验证。我已经通过“登录方法”启用了它,并在我的 javascript 中添加了一个匿名登录和控制台登录用户的功能。

const [authenticated, setAuthenticated] = useState(false);    

if (authenticated !== true) {
      firebase.app().auth().signInAnonymously()
        .then(() => {
          firebase.app().auth().onAuthStateChanged((user) => {
            if(user) {
              var uid = user.uid;
              console.log(uid);
            }
          })
        }).then(() => {
          setAuthenticated(true);
        }).catch((error) => {
          var errorCode = error.code;
          var errorMessage = error.message;
        });
      }

我的实时数据库规则现在是:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

创建了匿名用户,但是我无法像以前那样获取我的数据。在 Firebase 或可能在我的 javascript 中设置规则时,我是否缺少步骤?感谢您的帮助!

【问题讨论】:

    标签: javascript firebase-realtime-database firebase-authentication


    【解决方案1】:

    当您在代码中登录 Firebase 身份验证时,您将使用 REST API 访问 Firebase 的实时数据库。身份验证信息不会自动传递给这些 REST 调用(因为 Firebase 客户端对调用一无所知),因此您对数据库的调用未经身份验证并被(正确)拒绝。

    您必须自己明确地传递身份验证状态,如 authenticating REST calls 上的 Firebase 文档中所述,或者(更简单)您可以 use the Firebase Realtime Database SDK,它会自动传递信息。

    【讨论】:

    • 谢谢。我会更多地研究这两种方法,看看有什么效果!
    • 我使用 Firebase 实时数据库 SDK 文档中概述的方法来获取数据。我摆脱了我的 fetch 电话。现在可以了。谢谢。
    猜你喜欢
    • 2021-10-11
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多