【发布时间】:2017-07-22 20:15:37
【问题描述】:
我的 Firebase 数据库中有这样的结构:
--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。
我想在用户注销时删除他们。研究这个我遇到了这个answer。
我是这样应用的:
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)
});
})
这可以工作并删除用户,但即使在调用该函数时,它也会在页面加载时立即这样做......情节变厚了
【问题讨论】:
-
为什么每次用户登录时都要不断地写入表并删除?如果这些数据无论如何都会被删除,那么保留角度不是更好吗?
-
我想随时知道谁登录/在线
-
虽然@EduardoDennis 拥有一个用户列表并在登录和退出时更改“在线状态”会更好吗?我认为这是有道理的,因为我还想保留用户所属的组。谢谢
标签: angular firebase firebase-realtime-database angularfire2