当前位置: 首页 > 知识库问答 >
问题:

无法获取具有匿名身份验证的Firebase实时数据库

乌修筠
2023-03-14

我正在构建一个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"
  }
}

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

共有1个答案

孙乐逸
2023-03-14

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

您要么必须自己明确地传递身份验证状态,如Firebase文档中关于验证REST调用的解释,要么(更简单)可以使用Firebase实时数据库SDK,它会自动传递信息。

 类似资料:
  • 我正在使用Firebase实时数据库编写一个应用程序。有了这个应用,你可以创建视频,然后可以与任何人共享。我使用Firebase匿名身份验证。 我不希望用户需要注册或登录。所以这些投票是完全匿名的。实时数据库有以下规则: 据我所知,这意味着只有使用我的应用程序(为他们创建了匿名ID)的人才能读写数据库,对吗? 或者有没有其他方法可以让用户不用应用程序访问数据库?

  • 在本章中,我们将匿名认证用户。 步骤1 - 启用匿名身份验证 这和我们以前的章节是一样的。需要打开Firebase信息中心,点击侧边菜单中的Auth和标签栏内的认证方法,需要启用匿名身份验证。 第2步 - 登录功能 可以使用方法进行此认证。 示例 让我们来看看下面的例子,参考示例代码 -

  • 当使用Firebase身份验证匿名帐户时,它偶尔会在系统中创建一个新的用户ID,有时它会使用相同的用户ID。我真的希望每次都能创建相同的用户ID,这样匿名用户仍然可以在应用程序中维护相同的进度/数据。这实际上是我开始使用Firebase的原因。即使在重新启动应用程序等之后,我如何始终维护一个匿名帐户来保持相同的用户ID? 我希望用户每次以访客身份玩游戏时都能获得相同的ID。我看到有些应用程序在卸载

  • 将匿名帐户转换为永久帐户的文档指出了流程的3个步骤,但是步骤2似乎违反了步骤1。 当用户注册时,完成用户身份验证提供者的登录流程,直到(但不包括)调用其中一个身份验证提供者。用方法来表示。例如,获取用户的Google ID令牌、Facebook访问令牌或电子邮件地址和密码 获取新身份验证提供程序的身份验证凭据:

  • 最近,当我试图用Firebase匿名登录时,我得到以下错误 {“错误”:{“代码”:400,“消息”:“admin_only_operation”,“错误”:[{“消息”:“admin_only_operation”,“域”:“全局”,“原因”:“无效”}]}} 检查JSON消息是否正确格式化并包含有效字段(例如,确保传入正确的数据类型)。 我正在使用API提供的函数,所以我不知道我怎么可能实现错

  • 在本章中,我们将匿名验证用户。 第1步 - 启用匿名身份验证 这与我们前面章节中的过程相同。 您需要打开Firebase仪表板,单击侧面菜单中的Auth和标签栏内的SIGN-IN-METHOD 。 您需要启用匿名身份验证。 第2步 - 登录功能 我们可以使用signInAnonymously()方法进行此身份验证。 例子 (Example) 让我们考虑以下示例。 firebase.auth().s