Angular 如何按键或值删除用户?
我的Firebase数据库中有如下结构:Angular 如何按键或值删除用户?,angular,firebase,firebase-realtime-database,angularfire2,Angular,Firebase,Firebase Realtime Database,Angularfire2,我的Firebase数据库中有如下结构: --users --v7BwBnUBqJMXCtoOHYE51jXCwhY2: uid --etc loginFb() { this.af.auth.login({ provider: AuthProviders.Facebook, method: AuthMethods.Popup, }).then( (user) => { this.userOnlin
--users
--v7BwBnUBqJMXCtoOHYE51jXCwhY2: uid
--etc
loginFb() {
this.af.auth.login({
provider: AuthProviders.Facebook,
method: AuthMethods.Popup,
}).then(
(user) => {
this.userOnline(user.uid, 'uid');
this.router.navigate(['/members']);
}).catch(
(err) => {
this.error = err;
})
}
userOnline(uid, value) {
const users = this.af.database.object('/users');
users.update({ [uid]: value });
}
当用户通过以下方式进行身份验证时,将填充用户表:
--users
--v7BwBnUBqJMXCtoOHYE51jXCwhY2: uid
--etc
loginFb() {
this.af.auth.login({
provider: AuthProviders.Facebook,
method: AuthMethods.Popup,
}).then(
(user) => {
this.userOnline(user.uid, 'uid');
this.router.navigate(['/members']);
}).catch(
(err) => {
this.error = err;
})
}
userOnline(uid, value) {
const users = this.af.database.object('/users');
users.update({ [uid]: value });
}
这将在fb生成的用户表中为ea用户提供uid
我想在用户注销时删除该用户。研究这个我遇到了这个
我是这样应用的:
logout(userUID) {
this.af.auth.logout();
this.userOffline(userUID);
this.router.navigateByUrl('/login');
}
userOffline(userUID) {
const user = this.af.database.list('/', {
query: {
orderByChild: userUID,
equalTo: 'uid'
}
});
user.subscribe(snapshots=>{
snapshots.forEach(snapshot => {
console.log(snapshot);
snapshot.ref.remove();
});
})
}
console.log的结果是:
Object {v7BwBnUBqJMXCtoOHYE51jXCwhY2: "uid", $key: "users"}
唉,我得到了这个错误:
Cannot read property 'remove' of undefined
我肯定有更好的方法,但我什么也找不到。任何建议都将不胜感激
编辑
感谢@pengyy的评论,我对他们的建议做了一个小小的修改
user.subscribe(snapshots=>{
snapshots.forEach(snapshot => {
console.log(snapshot);
this.af.database.list('/users').remove(snapshot.userUID)
});
})
这可以工作并删除用户,但它会在页面加载时立即执行此操作,即使在调用函数时也是如此。。。绘图变厚通过
this.af.database.list('/users').remove(snapshot.$key)
按从表中删除项
this.af.database.list('/users').remove(snapshot.$key)
所以这是可行的。这么简单
谢谢@pengyy如果没有你的评论,我是不可能到达那里的
所以这是可行的。这么简单
谢谢@pengyy,如果没有您的评论,我是无法到达的。为什么每次用户登录时,您都会不断向表中写入内容并删除?如果这些数据无论如何都会被删除,那么留在angular不是更好吗?我想知道谁在任何时候登录/在线,尽管@EduardoDennis有一个用户列表,并且在登录和退出时更改“在线状态”会更好吗?我认为这是有意义的,因为我还希望持久化用户所属的组。谢谢为什么每次用户登录时都会不断地向表中写入内容并删除?如果这些数据无论如何都会被删除,那么留在angular不是更好吗?我想知道谁在任何时候登录/在线,尽管@EduardoDennis有一个用户列表,并且在登录和退出时更改“在线状态”会更好吗?我认为这是有意义的,因为我还希望持久化用户所属的组。谢谢,恐怕还在那儿。快照。$key只返回“user”,因此无法使用。抱歉,首先,您应该查询表用户以获取$key。编辑后,您的意思是在调用函数之前删除了用户?必须标记除您要回复的帖子问题或答案的作者之外的任何人。斯迈特可能从未见过你回答。您通过键入@标记人员,第一个字母将显示一个自动完成的列表。我不需要给你贴标签,因为你是我回复的作者。另外,也许你可以编辑你的答案,并详细说明,以帮助这个人和其他人更多。我担心用户仍然在那里。快照。$key只返回“user”,因此无法使用。抱歉,首先,您应该查询表用户以获取$key。编辑后,您的意思是在调用函数之前删除了用户?必须标记除您要回复的帖子问题或答案的作者之外的任何人。斯迈特可能从未见过你回答。您通过键入@标记人员,第一个字母将显示一个自动完成的列表。我不需要给你贴标签,因为你是我回复的作者。另外,也许你可以编辑你的答案并详细说明以帮助此人和其他人。我最终使用了以下方法:-logoutuserUID{this.af.auth.logout;this.userOfflineuserUID;this.router.navigateByUrl'/login';}-userOfflineuserUID{const user=this.af.database.list'/users';user.updateuserUID,{userOnline:false}}-因为这将持久化用户数据。使用“更新不推送”,以便不删除现有数据。请参阅我使用此方法结束的示例:-logoutuserUID{this.af.auth.logout;this.userOfflineuserUID;this.router.navigateByUrl'/login';}-userOfflineuserUID{const user=this.af.database.list'/users';user.updateuserUID,{userOnline:false};}-因为这将持久化用户数据。使用“更新不推送”,以便不删除现有数据。参考