我正在处理基于ionic的firebase-realtime-database,我对如何在$ uid节点内“读取”和“写入”感到有些困惑。我目前正在处理拒绝访问。
节点看起来像这样
rules {
"info": {
"$uid": {
".read": true,
".write": "$uid === auth.uid"
}
}
}
而我的json数据库看起来像这样
{
info: {
01: {
name:jay
age:16
}
}
}
我有点困惑采取什么步骤来访问$ uid节点内的数据。我确实尝试将json数据库节点更新为此。
{
info: {
f3de4734-8fb2-42bd-971d-8e693f8aab3b: { // auth.uid of dummy@gmail.com
01: {
name:jay
age:16
}
}
}
}
和我的“ getafdData()函数”路径目录到“'info /'+ getuser”。
仅当“ getuser”是文件的所有者或保存数据的节点时,以上更新才起作用,但是我希望其他经过身份验证的用户也可以读取它,而$ uid无法理解。
我已经通过firebase使用“ signInWithEmailAndPassword()”函数对登录进行身份验证
这是我用来验证的代码
try {
var r = await this.fAuth.auth.signInWithEmailAndPassword(
"dummy@gmail.com",
"123456"
);
if (r) {
console.log("Successfully logged in!");
await this.getafdData(); \\\ get the data when login
}
} catch (err) {
console.error(err);
}
async getafdData(){
var firebaseRef = this.afd.database.ref();
let data = await new Promise(function(resolve,reject){
return firebaseRef.child('info/')
.on("child_added", function(snapshot) {
console.log(snapshot.val());
//resolve(data);
}, function(err) {
console.log(err);
reject(err);
})
});
return data;
}
您能告诉我我在做什么错吗?还是我应该执行正确的步骤才能访问$ uid节点?
答案 0 :(得分:2)
".read": true
规则允许任何用户从/info/$uid
中读取数据。如果他们知道要读取其数据的用户的UID 。但是,在您的代码中,您将监听器附加到/info
上,并且没人对该节点具有读取权限,因此读取被拒绝。
如果希望每个人都能一次读取所有用户节点,则应将".read": true,
规则移至规则的/info
级别:
{
"rules": {
"info": {
".read": true,
"$uid": {
".write": "$uid === auth.uid"
}
}
}
实际上,由于您说要允许其他经过经过身份验证的用户读取用户信息,因此应该是:
{
"rules": {
"info": {
".read": "auth != null",
"$uid": {
".write": "$uid === auth.uid"
}
}
}