【问题标题】:Username authentication instead of email用户名身份验证而不是电子邮件
【发布时间】:2016-01-31 23:42:37
【问题描述】:

借助 Firebase,我可以使用电子邮件地址注册和登录用户。但是,如果我希望应用程序基于用户名怎么办。例如,您会使用“Bobzilla”而不是“Bob@mail.com”登录?

Firebase 可以做到这一点吗?

【问题讨论】:

    标签: firebase firebase-authentication


    【解决方案1】:

    Firebase 身份验证中没有内置默认的用户名+密码提供程序。但是您可以使用instructions in the Firebase documentation 创建自己的自定义身份提供程序。这需要在可信环境中运行的代码,您可以使用自己的服务器或Cloud Functions for Firebase。现在甚至还有example of this in the functions-samples repo


    或者:您可以使用内置的电子邮件+密码提供程序,只需在用户名后面添加任何域。所以一旦你确定了用户名,就用<username>@vikzillasapp.com注册你的用户。

    请注意,如果用户忘记密码,这将使他们无法重置密码,因为 Firebase 使用电子邮件地址发送密码重置电子邮件。

    【讨论】:

    • 好的,所以在我的代码中,我会将域添加到他们输入的任何唯一用户名。因此,当他们登录时,我只需将该域附加到他们的用户名以进行身份​​验证。想我当时明白了;谢谢!太糟糕了,我们无法控制密码,正如你提到的,如果他们想要更改密码,我也必须捕获他们的电子邮件。并非所有应用程序都如此;很多时候,应用程序不需要电子邮件。
    • 但是如果用户忘记了他们的信息,你不能及时重置密码,那他的做法是不是有缺陷?
    • firebase 真的需要您通过用户名进行身份验证。不仅是电子邮件
    【解决方案2】:

    与其使用为用户分配电子邮件地址的方法,不如在数据库中查找电子邮件地址是更好的选择。

    一个例子是:

    1. 提示用户使用用户名和密码登录
    2. 验证用户名是否存在于您的数据库中并检索该帐户的相应电子邮件地址
    3. 将此电子邮件地址无缝传递到登录过程

    【讨论】:

    • 有趣的想法。我认为问题在于您必须在数据库中打开所有这些电子邮件。
    • 这是一个有趣的想法,但只有当数据库读取权限不需要登录用户时才有效,除非您创建一个公开的分隔用户名集合。
    • 没错,但是,您很可能会打开数据库读取权限,因为否则您将无法在创建帐户时验证电子邮件是否已经存在(以防止重复的电子邮件地址)
    • 应该作为客户端调用的云功能完成,因此用户名/电子邮件组合在服务器端受到保护,但是您必须将明文密码传递给云功能。也可以散列客户端并通过云功能处理注册,但不确定身份验证令牌如何与移动 SDK 一起使用?真是一团糟……
    【解决方案3】:

    您可以使用firebase custom auth。自定义身份验证是一种用户可以使用自定义令牌登录到应用程序的方法。

    但是,当用户将用户名和密码发送到该后端时,您需要后端代码 create custom token

    幸运的是,现在有firebase cloud 功能,带有http 事件,可以轻松解决您的问题。步骤是:

    1. 用户通过查询参数 (GET) 或请求正文 (POST) 将用户名和密码发送到云函数 url

    2. 云功能会检查用户名和密码是否有效(例如:来自实时数据库)

    3. 如果用户名和密码有效,云功能将使用userId创建自定义令牌(您需要保存userId)。然后将其发送到响应正文

    4. 然后客户端可以使用该 customToken 登录

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      相关资源
      最近更新 更多