Firebase Angularfire2 检查用户是否存在于数据库中
Firebase Angularfire2 checking if user exists in the database
我有一个包含 2 个对象的数据库。它看起来像这样:
users
- KEY
login: "xexe"
password: "123"
- KEY
login: "dede"
password: "123"
现在我正在检查用户是否存在于数据库中
constructor(private af: AngularFire) {
this.users = af.database.list('/users');
}
registerUser(login: string, password: string) {
this.af.database.list('/users', {
query: {
orderByChild: 'login',
equalTo: login
}
}).subscribe(response => {
if(response.length === 0) {
console.log("User does not exist");
//here i will add a user
} else {
console.log("Users exists");
}
})
}
有什么问题?
让我们尝试使用 "dede" 登录名注册用户(用户应该存在)
当我第一次点击提交按钮时,控制台显示:
Users exists
-> 嗯,很好。
问题出在我第二次点击提交时(没有刷新网页)
然后console.log给我看两条消息
User does not exist
User exists
这会增加一个新用户不应该做的事情。为什么订阅函数第二次遍历每一行?如何解决?
您可以构建数据以使用 login
属性 而不是使用查询,因为它们 KEY
.
{
"users": {
"dede": {
"login": "dede",
"password": "Do not store passwords :)"
},
"xexe": {
"login": "xexe"
}
}
}
现在您可以创建对此位置的引用并检查该对象是否存在。
registerUser(login: string, password: string) {
const user = this.af.database.object(`users/${login}`);
user.subscribe(data => {
if(data.$value !== null) {
console.log('User does not exist');
} else {
console.log('User does exist');
}
});
}
我有一个包含 2 个对象的数据库。它看起来像这样:
users
- KEY
login: "xexe"
password: "123"
- KEY
login: "dede"
password: "123"
现在我正在检查用户是否存在于数据库中
constructor(private af: AngularFire) {
this.users = af.database.list('/users');
}
registerUser(login: string, password: string) {
this.af.database.list('/users', {
query: {
orderByChild: 'login',
equalTo: login
}
}).subscribe(response => {
if(response.length === 0) {
console.log("User does not exist");
//here i will add a user
} else {
console.log("Users exists");
}
})
}
有什么问题?
让我们尝试使用 "dede" 登录名注册用户(用户应该存在)
当我第一次点击提交按钮时,控制台显示:
Users exists
-> 嗯,很好。
问题出在我第二次点击提交时(没有刷新网页)
然后console.log给我看两条消息
User does not exist
User exists
这会增加一个新用户不应该做的事情。为什么订阅函数第二次遍历每一行?如何解决?
您可以构建数据以使用 login
属性 而不是使用查询,因为它们 KEY
.
{
"users": {
"dede": {
"login": "dede",
"password": "Do not store passwords :)"
},
"xexe": {
"login": "xexe"
}
}
}
现在您可以创建对此位置的引用并检查该对象是否存在。
registerUser(login: string, password: string) {
const user = this.af.database.object(`users/${login}`);
user.subscribe(data => {
if(data.$value !== null) {
console.log('User does not exist');
} else {
console.log('User does exist');
}
});
}