繁体   English   中英

实时数据库身份验证:失败:DatabaseError:权限被拒绝

[英]Realtime database authentication: failed: DatabaseError: Permission denied

我想使用安全快速入门指南中的这些规则

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

虽然我不明白从哪里读取auth.uid

当我执行以下操作时,可以获取它来存储信息,以便可以确认问题出在auth.id 我不确定是否需要将其作为参数传递? 恐怕这是我迷路的地方。

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

这是我用来测试的当前Java代码:

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
User u = new User("Jack", "jack@email.co.uk", "12345678"); // Very simple class holding this user information
myRef.child("users").child(mFirebaseUser.getUid()).setValue(u);

我一直在查看Firebase实时数据库上的信息,但是每次他们进行身份验证时,他们只是说:“目前,我们将关闭身份验证,但请确保您在生产中使用它!”。

好吧,您不需要传递参数,firebase会为您传递参数。 让我尝试解释一下,在控制台中创建用户并登录应用程序后,firebase将为每个用户提供不同的uid (类似于ca07912b-7e65-41ad-8342-e87cf6f6ceb2 )。

因此,登录后它将存储在您的智能手机中,并且您在数据库Firebase中所做的每个请求都将分析您的安全规则,因此当您说只有uid X的所有者可以访问/users/**X**/..然后,如果您未登录,则无权读取任何内容,也无法在此路径上进行写操作。

我是个白痴

我正在打电话给FirebaseAuth.getInstance().signOut(); 在我最初用于调试目的的代码上方几行。

暂无
暂无

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

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