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

时间:2017-01-12 16:21:40

标签: java firebase firebase-realtime-database firebase-authentication firebase-security

我想使用security quickstart guide

中的这些规则
{
  "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);

我一直在查看有关火灾实时数据库的信息,但每次进行身份验证时,他们只会说"现在我们将关闭身份验证但确保您在生产中使用它!&# 34。

2 个答案:

答案 0 :(得分:0)

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

因此,在您登录后,它将存储在您的智能手机中,您在数据库firebase中执行的每个请求都将分析您的安全规则,因此当您说只有 X 的所有者时可以访问/users/**X**/..然后,如果您没有登录,则您无权阅读此路径。

答案 1 :(得分:0)

我是一个血腥的白痴,

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

相关问题