【问题标题】:Firebase Authentication Random TokenFirebase 身份验证随机令牌
【发布时间】:2022-01-01 15:24:05
【问题描述】:

我想做一个应用程序,您只能使用我给人们的特定随机唯一令牌进行注册。所以我给了他们一个令牌,例如:8743-2342-6587,他们可以在注册页面上的应用程序中输入此令牌,还可以像基本身份验证一样输入电子邮件和密码。

最好的方法是什么? 也许我应该在 Firestore 中收集免费的令牌。在注册时,我检查该集合中是否存在令牌,如果是,则将其设置为“非免费”,这可能是一个布尔值。并且用户注册......或者有更好的方法来做这样的事情吗?

【问题讨论】:

    标签: firebase ionic-framework firebase-authentication


    【解决方案1】:

    执行此操作的一种方法是将所有这些令牌存储在 Firestore 集合中,当用户输入代码时,在 Cloud 函数中对其进行验证,然后使用 Admin SDK 创建一个帐户。然后您可以使用客户端 SDK 登录用户。流程是这样的:

    1. 用户输入凭据以及令牌(如果有)进行注册
    2. 这些凭据被发送到 Cloud Function,然后使用提供的凭据在 Firebase 身份验证中创建用户
    3. 如果用户还提供了任何令牌,您可以检查 Firestore 中是否存在该令牌,然后在数据库或 custom claims 中设置所需的布尔值。

    例如:

    exports.registerUser = functions.https.onCall((data, context) => {
      const { email, password, token } = data; 
    
      const { user } = await admin.auth().createUser({email, password})
    
      // const token = {check if token exists in Firestore}
    
      if (token) {
        // set custom claims
      }
    });
    

    您也可以先创建一个帐户,然后在没有云功能的情况下直接检查令牌是否存在,但这只有在令牌与电子邮件相关联时才有效,因此只有该用户可以检查它的存在(除非允许任何人检查它)。

    如果用户必须首先提供令牌来创建帐户,那么我建议使用云功能。如果需要,您也可以disable sign ups from Firebase Client SDKs(需要 Cloud Identity API)。

    【讨论】:

    • 听起来不错。谢谢!还有一个问题,你知道我如何创建许多独特的令牌并将它们保存在 Firestore 集合中吗?重要的一点是,每个令牌只允许存在一次。没有重复的令牌。
    • @Fabian 您可以使用add() 方法继续添加越来越多的文档,该方法将使用循环为您生成一个随机ID。您可以为它编写 JS 并使用使用生产数据库的模拟器在本地运行它。
    • 关键是,每个令牌都作为许可证工作。所以有人可以购买 500 个许可证,然后在那一刻我必须创建 500 个与现有令牌不同的令牌并将它们保存在 Firestore 集合“令牌”中
    • @Fabian 我不确定这个createTokens() 函数将如何被触发。但是您所要做的就是一次创建多个文档。结帐this gist 以供参考。
    • 非常感谢您的支持! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-16
    • 2021-09-23
    • 2019-06-28
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多