FireBase安全规则不适用于auth.uid

时间:2019-08-22 11:47:33

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

我正在尝试设置Firebase规则,如果$ uid等于auth.uid,则该规则将授予对R / W的访问权限。 我使用Firebase电话身份验证登录。

这是我项目的auth部分: image

这是我的数据库结构: image

我正在尝试以下规则:

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

此规则:

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

当我尝试访问数据时出现错误(权限被拒绝)。

    AppController.getInstance().userid = String.valueOf(mAuth.getCurrentUser().getUid());
               Log.d("PhoneAuthuid2",AppController.getInstance().userid);
Firebase ref = new Firebase("https://xxxdatabase.firebaseio.com/users/");
                   ref.child(AppController.getInstance().userid).addListenerForSingleValueEvent(new ValueEventListener() {
                       @Override
                       public void onDataChange(DataSnapshot snapshot) {
                           if (snapshot.exists()) {
                               final User userbilgi = snapshot.getValue(User.class);
                                   Intent intent = new Intent(activation.this, anamenu.class);
                                   intent.putExtra("useruid", userbilgi.getUseruid());
                                   intent.putExtra("phonenumber",userbilgi.getPhonenumber());
                                   intent.putExtra("userdurum", userbilgi.getUserdurum());
                                   intent.putExtra("now", userbilgi.getNow());
                                   intent.putExtra("lastclicktime", userbilgi.getLastclicktime());
                                   intent.putExtra("clickcount", userbilgi.getClickcount());
                                   intent.putExtra("totalclickcount", userbilgi.getTotalclickcount());
                                   intent.putExtra("coincount", userbilgi.getCoincount());
                                   intent.putExtra("satlink",getIntent().getStringExtra("satlink"));
                                   intent.putExtra("reklink",getIntent().getStringExtra("reklink"));
                                   startActivityForResult(intent, 1);
                           }
                       }

                       @Override
                       public void onCancelled(FirebaseError firebaseError) {
                        Log.d("PhoneAuthFirebase",String.valueOf(firebaseError));
                       }

                   });

我遵循Firebase的说明,并且此规则通过了模拟器。

这些规则到位后,我无法从Firebase获取带有快照的实例。

如果您能帮助解决问题,我将不胜感激。

更新: 这是模拟器结果: image

我正在尝试模拟器授予访问权限以进行读取或写入。但不是在真实设备中。我无法从Firebase获取数据。

1 个答案:

答案 0 :(得分:0)

我认为这是因为版本不匹配或用于它的包不同,所以它不能在 firebase 规则中使用 auth.uid