Firebase 身份验证随机令牌

Firebase Authentication Random Token

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

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

一种方法是将所有这些令牌存储在 Firestore 集合中,当用户输入代码时,在云功能中验证它,然后使用 Admin SDK 创建一个帐户。然后您可以使用客户端 SDK 登录用户。流程如下:

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

例如:

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)。