首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防火墙Angularfire2检查数据库中是否存在用户

防火墙Angularfire2检查数据库中是否存在用户
EN

Stack Overflow用户
提问于 2016-07-17 14:57:31
回答 1查看 6.6K关注 0票数 6

我有一个包含两个对象的数据库。看起来是这样的:

代码语言:javascript
复制
users
    - KEY
        login: "xexe"
        password: "123"

    - KEY
        login: "dede"
        password: "123"

现在我正在检查数据库中是否存在用户

代码语言:javascript
复制
  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给我看了两条消息

代码语言:javascript
复制
User does not exist
User exists

这将增加一个新的用户什么是不应该做的。为什么订阅函数第二次迭代每一行?怎么修呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-18 13:15:12

与使用查询不同,您可以构造数据以使用login属性作为KEY

代码语言:javascript
复制
{
  "users": {
    "dede": {
      "login": "dede",
      "password": "Do not store passwords :)"
    },
    "xexe": {
      "login": "xexe"
    }
  }
}

现在,您可以创建对此位置的引用,并检查该对象是否存在。

代码语言:javascript
复制
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');
    }
  });
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38422581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档