2017-06-29 64 views
1

我正在写一段代码来使用角度从firebase数据库中删除用户的信息。我有我需要的用户的电子邮件ID。数据库的结构如下。如何从javascript中的firebase数据库中删除用户的信息(即使他/她当前未登录)?

users 
 
    |_unique key 
 
    |  |_email:value 
 
    |  |_tag:value 
 
    |_unique key 
 
     |_...

好了,所以我有电子邮件ID,并使用它在equalTo()orderByChild()我使用 '值' 方法来获取用户的价值。现在,我想访问此用户的唯一密钥,以删除他\她的数据。这是我如何去做的。

deleteUser(email) 
 
    { console.log(email); 
 
    var userid; 
 
    firebase.database().ref('users').orderByChild('email').equalTo(email).on("value",(snapshot)=>{ 
 
    userid=snapshot.key; 
 
    console.log(snapshot); 
 
    console.log(userid) 
 
    firebase.database().ref('users/userid').remove(); 
 
    }) ; 
 
     
 
     
 
    }

但由于某些原因,而不是唯一的密钥获得存储在“用户id”变量“用户”被获得存储,我不能够删除所需要的信息。请帮忙 !

回答

2

要做到这一点首先你在规则中有索引你的孩子“电子邮件”,然后

{ 
    "rules": { 
     "users": { 
     ".indexOn": "email", 
     ".read" : "auth.uid !== null", 
     ".write" : "auth.uid !== null" 
    } 
    } 
} 

写这个规则后,现在使用此功能

deleteUser(email) 
    { 
console.log(email); 
var userid; 
firebase.database().ref('users').orderByChild('email').equalTo(email).once('value', function(data) { data.forEach(function(child) { 
userid = child.key 
console.log(userid); 
firebase.database().ref('users/'+userid).remove(); })}); 
} 
+0

写来回阅读规则,并根据写到您的计划,为尝试,现在保持这两个值真@Schimay – Prags

+0

谢谢,它的工作!你能解释一下在这种情况下forEach究竟做了什么? – Schimay

+0

是的,因为你使用“value”,它会调用父节点,子节点,所以要访问parentNode的子元素,你必须使用forEach,如果你知道父键,那么就没有foreach的用法。如果您使用child_added或更改或删除instaed的值,那么在这种情况下没有使用每个值。 – Prags

相关问题