Android 验证Firebase后读取数据时权限被拒绝
我是Firebase的新手,身份验证Firebase后读取数据时出现的问题是权限被拒绝。我研究了所有主题,发现了同样的问题: . 但是,弗兰克·范·帕夫伦(Frank van Puffelen)“答案对我来说不管用。以下是我的Firebase规则:Android 验证Firebase后读取数据时权限被拒绝,android,firebase,firebase-security,firebase-realtime-database,Android,Firebase,Firebase Security,Firebase Realtime Database,我是Firebase的新手,身份验证Firebase后读取数据时出现的问题是权限被拒绝。我研究了所有主题,发现了同样的问题: . 但是,弗兰克·范·帕夫伦(Frank van Puffelen)“答案对我来说不管用。以下是我的Firebase规则: { "rules": { "user": { "$uid": { "profile": { ".read": "auth != null && auth.uid == $uid",
{
"rules": {
"user": {
"$uid": {
"profile": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
},
"account": {
".read": false,
".write": false
},
"shared": {
"$sharedid": {
".read": "auth != null && auth.uid == $uid",
".write": false
}
},
"shared_user": {
".read": false,
".write": false
}
}
},
"node": {
"$uid": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
}
},
"shared": {
"$sharedid": {
".read": "auth != null && root.child('user').child(auth.uid).child('shared').child($sharedid).child('read').val() === true",
".write": "auth != null && root.child('user').child(auth.uid).child('shared').child($sharedid).child('write').val() === true"
}
}
}
}
我找到了很多方法,但还是被拒绝了。请帮帮我
编辑:这里是我的作者:
mFirebaseRef= new Firebase("https://my-dashboard.firebaseio.com");
mFirebaseRef.authWithPassword(Constants.EMAIL, Constants.PASSWORD, new AuthResultHandler("password"));
授权句柄:
private class AuthResultHandler implements Firebase.AuthResultHandler{
private final String provider;
public AuthResultHandler(String provider){
this.provider=provider;
}
@Override
public void onAuthenticated(AuthData authData) {
Log.i(TAG, provider + " auth successful");
getData(mFirebaseRef.child("node"));
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
Log.i(TAG, provider+ " auth unsuccessful");
}
}
最后,获取数据:==>权限被拒绝
private void getData(Query ref){
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i(TAG, " onDataChange");
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.i(TAG, firebaseError.getMessage());
}
});
}
你做错了。您的代码表明您在安全规则中的“节点”子节点上没有读写权限。您对'node'的子节点'$uid'具有读写权限 因此,改变:
getData(mFirebaseRef.child("node"));
致:
请记住:Firebase安全规则采用自上而下的方法,如果您不提及规则,默认情况下读写都是错误的。因此,在子节点“node”中,您没有提到读或写权限,因此,默认情况下,它为false。但对于内部子级“$uid”,您已经提到了读写安全规则,因此,只要客户端使用相同的uid进行身份验证,就可以对其进行读写
此外,请记住,如果在顶层指定读写权限,则内部定义没有任何意义,例如,假设您有如下规则:
.
.
"node" : {
".read" : true,
"$uid": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
}
}
.
.
在上面的示例中,任何人都可以读取“节点”子节点及其所有子节点(包括“$uid”子节点),因为“$uid”的父节点已读取定义的所有安全规则,所以其所有子节点的安全规则都将被覆盖。因此,请注意规则定义
希望这能解决您的问题:)请为失败的读取操作添加最少的代码。一定要包括它开始阅读的路径。谢谢你的帮助,我解决了很久。但现在,我不使用Firebase,因为它不支持我想要的某些功能。哦,我明白了。没关系,我也遇到了同样的问题,所以我想让我们帮你解决这个问题。希望这对某人有帮助:)
.
.
"node" : {
".read" : true,
"$uid": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
}
}
.
.