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');
    }
  });
}