首页 > 解决方案 > 如何在 Firebase 中收到电子邮件验证通知?

问题描述

我想使用 Firebase Auth 进行电子邮件/密码注册。问题是我只想在使用的电子邮件地址也经过验证时接受用户身份验证。

通常我们可以使用监听器来检查用户何时登录或不再登录:

        Auth.auth().addStateDidChangeListener { (auth, user) in

问题是当用户单击验证电子邮件中的链接时,不会触发此侦听器。只有在创建帐户后才会调用它。

在等待用户单击链接时,循环执行以下操作:

        Auth.auth().currentUser!.reload() {
            if !Auth.auth().currentUser!.isEmailVerified {

但问题是我理想情况下想要管理侦听器回调中的所有身份验证内容,但是当电子邮件验证状态更改时不使用侦听器。

有什么我想念的吗?

我知道在移动设备上您可以使用深度链接,因此邮件中的链接会再次打开应用程序,但这不是我想要的,因为用户可以在他们的计算机上打开邮件,所以问题仍然需要解决。

目前我看到的唯一解决方案是自己发送一个 nsnotification 并在我处理所有身份验证代码的地方处理它,但感觉有点乱。

标签: iosfirebasefirebase-authentication

解决方案


以下是一些选项:

  1. 设置 RTDB 节点来跟踪emailVerified用户。
  2. 实现您自己的登录页面以进行电子邮件验证:https ://firebase.google.com/docs/auth/custom-email-handler
  3. 在您的登录页面中,验证用户后,emailVerified在该 RTDB 节点中进行更新。
  4. 在用户发送电子邮件验证的页面上,收听该节点上的更改。在更改时,调用user.reload()更新emailVerified用户并user.getIdToken(true)确保令牌已更新为最新声明。

另一种方法是上述方法的一种变体,即添加一个continueUrl将在默认电子邮件验证上显示一个继续按钮以重定向到您知道用户已通过验证的您拥有的页面。您还可以使用与上述类似的机制,通过该页面上的实时数据库而不是登录页面来传递状态更改。


推荐阅读