繁体   English   中英

无法使用匿名身份验证获取 Firebase 实时数据库

[英]Cannot fetch a Firebase Realtime Database with anonymous authentication

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

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"
  }
}

我现在正在尝试允许匿名身份验证。 我已通过“登录方法”启用它,并将 function 添加到我的 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 中设置规则时,我是否遗漏了一个步骤? 感谢您的任何帮助!

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

您必须自己明确地通过身份验证 state,如 Firebase 文档中关于身份验证 REST 调用的说明,或者(更简单)您可以使用 Firebase 实时数据库 SDK ,它会自动传递信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM