【问题标题】:angularfire2 + angular 4: fetching data and using it in a componentangularfire2 + angular 4:获取数据并在组件中使用它
【发布时间】:2017-10-13 10:57:34
【问题描述】:

好的,我最近将 angularJS 转换为 angular 4.x,但我遇到了一些问题。请注意,我没有移动任何应用程序,我只是从头开始构建一个新应用程序,使用 Firebase 作为我的后端。

我已经到了身份验证工作正常的阶段(注册和登录)。但是,Firebase 的内置用户系统允许使用电子邮件地址和密码进行注册——而我想添加一个用户名。要求此用户名是唯一的。

作为一个结构,我有一个 auth.service 负责与 firebase 交谈以注册/登录/注销。 从概念上讲,我的想法是一旦用户想要注册(因此,填写表格并单击按钮),查询数据库以查找已使用该名称注册的任何用户。 这是我一直未能成功实现的目标。我查询数据,但是当我想使用它时,它总是未定义...

为了简化,确保用户只有在他选择的用户名唯一的情况下才能注册的最佳方法是什么?

我会很感激任何帮助,即使只是指出一个教程,我发现文档很难理解。我正在使用带有 angularfire2 v4 的 firebase 3.9。

谢谢:)

【问题讨论】:

    标签: angular firebase angularfire2


    【解决方案1】:

    我可以看到两种方法来检查用户是否已经注册。

    1. 如果有已经注册的用户,Firebase 会抛出错误

    这可能是最简单的方法,您不需要在现有代码中添加太多代码。只需在实现注册的服务中修改可观察到的错误处理即可。

    1. 添加“/users”节点

    在您执行注册功能之前,请检查您的用户列表是否存在类似这样的电子邮件

    db.list('/users', ref => ref.equalTo(signUpEmail))
    

    请注意,只要您有新的注册用户,请将其添加到此列表中。

    更多信息:

    查询列表-https://github.com/angular/angularfire2/blob/master/docs/rtdb/querying-lists.md

    【讨论】:

    • 嗨,brijmcq,当我走第二个解决方案的道路时,我显然会接受你的回答。再做一点调整,如果用户名已经被占用,我实际上会实时显示。只需要稍微调整一下,因为目前我在每次击键时都会查询数据库,这可能并不理想。
    • 就个人而言,我更喜欢第二种解决方案,但我总是实施第一种解决方案,因为它快速简单,我只会收到错误消息并使用 toast 通知显示它。我认为您需要实现debounceTime,这样就不会在每次按键时都查询数据库,而仅在用户在几毫秒后停止输入时才查询数据库。
    猜你喜欢
    • 2019-10-15
    • 1970-01-01
    • 2016-12-04
    • 2018-05-06
    • 2018-04-21
    • 2018-01-17
    • 2018-02-14
    • 2017-12-15
    • 1970-01-01
    相关资源
    最近更新 更多