【发布时间】:2018-09-18 19:28:04
【问题描述】:
我正在使用 firebase 实时数据库,并为数据库设置了以下规则,
{
"rules": {
".read": "auth !== null",
".write": "auth !== null"
}
}
但是当我尝试删除一个条目时,它给了我一个错误,说权限被拒绝,如下所示。
Database: Client doesn't have permission to access the desired data. (database/permission-denied).
我该怎么办?我不明白为什么我可以按照当前规则完成所有读写操作而不是删除。
谁能帮我解决这个问题?
注意: 与 Firebase 模拟器相关的结果图片
检查 firebase.auth().currentUser 时:
deleteUserAccount(userId) {
let knownLocationRef = this.database.ref('lastKnown/' + userId);
let promises = [];
console.log('auth details', this.auth.currentUser);
console.log('auth details null', this.auth.currentUser !== null); //returns true
knownLocationRef.once('value').then( (data) => {
console.log('data ', data.val());
if (data.val() !== null) {
let prevLat = data.val().lat;
let prevLong = data.val().long;
console.log('auth details', this.auth.currentUser);
console.log('auth details null', this.auth.currentUser !== null); //returns false
promises.push(knownLocationRef.remove());
}
});
return Promise.all(promises);
}
【问题讨论】:
-
auth != null表示客户端使用Firebase Auth 模块进行身份验证。 Auth 为所有请求添加一个令牌以表明它们已登录。 -
@JamesPoag - 是的,我明白这一点。而且我已经配置了 Firebase 身份验证,并且尝试删除数据的用户也经过身份验证。用户可以毫无问题地读取和写入数据到数据库。
-
嗯。你知道如何在 firebase 控制台中使用数据库规则模拟器吗?尝试将空值写入分支以模拟删除(移除)。
-
@JamesPoag:是的,我也试过了。但是随后我允许模拟写入。由于我无法在有关模拟器的评论中添加图像,因此我将使用模拟结果的图像更新问题
-
您使用的是哪个客户端 SDK?您可以使用
null执行写入而不是删除/删除吗? (用于调试目的)
标签: javascript database firebase firebase-realtime-database firebase-security