Firebase 安全规则权限被拒绝
Firebase Security Rules permission denied
我的 firebase 数据库是这样的:-
这些是我编写的安全规则,但是当我在模拟器中使用它们时,它们验证得很好,但是在代码中使用时,给予权限被拒绝错误
{
"rules": {
"jokes" : {
"textjokes" : {
".read" : true,
".write": "auth != null"
}
},
"users": {
"$uid": {
".write": "$uid == auth.uid"
}
},
"userslikelist": {
"$uid": {
".write": "$uid == auth.uid"
}
}
}
}
我收到错误:-
/userslikelist/qzCqJph6XcZbiIpbDKTTxwjRHrh1/-KK850oXwPnOvxan1xNG 失败:FirebaseError:权限被拒绝
/jokes/textjokes/MISC-0-01/likeCount 失败:FirebaseError:权限被拒绝
我的代码:-
Firebase ref = new Firebase("https://xxxxxxxxx.firebaseio.com/userslikelist/" + mAuth.getCurrentUser().getUid());
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
if(!likedMap.containsKey(postSnapshot.getKey())){
likedMap.put(postSnapshot.getKey(), postSnapshot.getValue(String.class));
}
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
我不明白。我做错了什么?
更新代码:-
{
"rules": {
"jokes": {
"textjokes": {
".read": true,
".write": "auth != null"
}
},
"users": {
"$uid": {
".write": "$uid == auth.uid"
}
},
"userslikelist": {
"$uid": {
".read": "$uid == auth.uid",
".write": "$uid == auth.uid"
}
}
}
}
您没有授予对 /userslikelist/userId
的读取权限,因此您将无法在 onDataChange
.
上获得 dataSnapshot
确保在 /userslikelist/userId
级别设置读取权限。
{
"rules": {
"jokes" : {
"textjokes" : {
".read" : true,
".write": "auth != null"
}
},
"users": {
"$uid": {
".write": "$uid == auth.uid"
}
},
"userslikelist": {
"$uid": {
".read": "$uid == auth.uid", //do whatever logic you need here
".write": "$uid == auth.uid"
}
}
}
}
对于遇到此问题的任何其他人。这里的问题是我使用旧版 firebase api 方法来设置值并从数据库中读取。我更改了更新方法以使用本示例中使用的新 google firebase 系统,现在我可以更新数据库了。
我的 firebase 数据库是这样的:-
这些是我编写的安全规则,但是当我在模拟器中使用它们时,它们验证得很好,但是在代码中使用时,给予权限被拒绝错误
{
"rules": {
"jokes" : {
"textjokes" : {
".read" : true,
".write": "auth != null"
}
},
"users": {
"$uid": {
".write": "$uid == auth.uid"
}
},
"userslikelist": {
"$uid": {
".write": "$uid == auth.uid"
}
}
}
}
我收到错误:-
/userslikelist/qzCqJph6XcZbiIpbDKTTxwjRHrh1/-KK850oXwPnOvxan1xNG 失败:FirebaseError:权限被拒绝
/jokes/textjokes/MISC-0-01/likeCount 失败:FirebaseError:权限被拒绝
我的代码:-
Firebase ref = new Firebase("https://xxxxxxxxx.firebaseio.com/userslikelist/" + mAuth.getCurrentUser().getUid());
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
if(!likedMap.containsKey(postSnapshot.getKey())){
likedMap.put(postSnapshot.getKey(), postSnapshot.getValue(String.class));
}
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
我不明白。我做错了什么?
更新代码:-
{
"rules": {
"jokes": {
"textjokes": {
".read": true,
".write": "auth != null"
}
},
"users": {
"$uid": {
".write": "$uid == auth.uid"
}
},
"userslikelist": {
"$uid": {
".read": "$uid == auth.uid",
".write": "$uid == auth.uid"
}
}
}
}
您没有授予对 /userslikelist/userId
的读取权限,因此您将无法在 onDataChange
.
dataSnapshot
确保在 /userslikelist/userId
级别设置读取权限。
{
"rules": {
"jokes" : {
"textjokes" : {
".read" : true,
".write": "auth != null"
}
},
"users": {
"$uid": {
".write": "$uid == auth.uid"
}
},
"userslikelist": {
"$uid": {
".read": "$uid == auth.uid", //do whatever logic you need here
".write": "$uid == auth.uid"
}
}
}
}
对于遇到此问题的任何其他人。这里的问题是我使用旧版 firebase api 方法来设置值并从数据库中读取。我更改了更新方法以使用本示例中使用的新 google firebase 系统,现在我可以更新数据库了。