【问题标题】:Firebase email/password authentication - how to require email verification?Firebase 电子邮件/密码身份验证 - 如何要求电子邮件验证?
【发布时间】:2021-11-21 08:48:47
【问题描述】:

每当我在 Firebase 中使用电子邮件/密码身份验证提供程序时,即使emailVerifiedfalse,该提供程序也会在成功注册后发送一个不记名令牌。有没有办法开箱即用地配置电子邮件/密码身份验证提供程序,使其在用户验证其电子邮件地址之前不发送不记名令牌(并返回 403 错误)?

请注意,我知道如何通过 createUserWithEmailAndPasswordsignInWithEmailAndPasswordsignOut 方法使用 firebase v9.x 创建用户、登录用户、发送验证电子邮件等... sendEmailVerification 来自 firebase/auth。我只是问是否有一种方法可以设置提供者的行为,而不必为此编写我自己的处理程序函数。每当需要电子邮件验证时,我希望它的行为与 Cognito 一样。

【问题讨论】:

    标签: firebase firebase-authentication


    【解决方案1】:

    无法要求用户在登录 Firebase 身份验证之前验证其电子邮件地址。这是您希望在应用程序代码中实现的内容:

    1. 用户输入他们的凭据
    2. 您使用这些凭据将他们登录到 Firebase
    3. 您检查他们的电子邮件地址是否经过验证
    4. 如果没有,您可以阻止他们进一步使用该应用 - 并(可选)向他们发送一封验证电子邮件。

    与数据访问相同:如果您有自定义后端代码,您可以检查电子邮件地址是否也在 ID 令牌以及 Firebase 的服务器端安全规则中得到验证。

    【讨论】:

    • 谢谢。完全理解,这就是我的想法/恐惧。我采用 firebase 之类的东西的目标之一是将我必须在这里写的代码(坦率地说......当我过去推出自己的身份验证时我必须写的东西)卸载到提供者本身作为配置/设置。是否有一些路线图可以将此功能内置到 Firebase 电子邮件/密码身份验证提供程序中?
    【解决方案2】:

    createUserWithEmailAndPassword() 将在创建帐户后立即登录用户。此外,即使用户的电子邮件未经过验证,也没有任何方法可以阻止用户登录,但您实际上可以检查电子邮件是否在安全规则中经过验证,或者使用 Admin SDK 来防止未验证电子邮件的用户访问您的资源。您可以在 Firestore 中使用此规则:

    allow read, write: if request.auth.token.email_verified == true;
    

    一种解决方法是使用Cloud functionAdmin SDK 创建用户,这不会让用户登录,但请注意用户可以登录。


    如果您想阻止登录,除非电子邮件经过严格验证,那么您可以在创建帐户后立即禁用帐户。现在您可能无法使用首先需要用户登录的sendEmailVerification(),您始终可以创建自己的解决方案来验证电子邮件。该过程可能类似于:

    1. 在云函数中创建用户并禁用帐户
    2. 生成一些令牌或标识符以验证电子邮件并从同一云功能向用户发送电子邮件
    3. 一旦用户访问该链接并验证电子邮件,您就可以启用它

    此外,用户仍然可以使用 REST API 创建帐户,但您可以disable sign ups,因此只能通过云功能创建用户,这会立即禁用用户。

    【讨论】:

      猜你喜欢
      • 2019-07-13
      • 1970-01-01
      • 2023-03-18
      • 2016-10-13
      • 2018-11-11
      • 2013-07-11
      • 2018-02-10
      • 2019-08-05
      • 2019-03-15
      相关资源
      最近更新 更多