ios - 如何在 Firebase 中收到电子邮件验证通知?
问题描述
我想使用 Firebase Auth 进行电子邮件/密码注册。问题是我只想在使用的电子邮件地址也经过验证时接受用户身份验证。
通常我们可以使用监听器来检查用户何时登录或不再登录:
Auth.auth().addStateDidChangeListener { (auth, user) in
问题是当用户单击验证电子邮件中的链接时,不会触发此侦听器。只有在创建帐户后才会调用它。
在等待用户单击链接时,循环执行以下操作:
Auth.auth().currentUser!.reload() {
if !Auth.auth().currentUser!.isEmailVerified {
但问题是我理想情况下想要管理侦听器回调中的所有身份验证内容,但是当电子邮件验证状态更改时不使用侦听器。
有什么我想念的吗?
我知道在移动设备上您可以使用深度链接,因此邮件中的链接会再次打开应用程序,但这不是我想要的,因为用户可以在他们的计算机上打开邮件,所以问题仍然需要解决。
目前我看到的唯一解决方案是自己发送一个 nsnotification 并在我处理所有身份验证代码的地方处理它,但感觉有点乱。
解决方案
以下是一些选项:
- 设置 RTDB 节点来跟踪
emailVerified
用户。 - 实现您自己的登录页面以进行电子邮件验证:https ://firebase.google.com/docs/auth/custom-email-handler
- 在您的登录页面中,验证用户后,
emailVerified
在该 RTDB 节点中进行更新。 - 在用户发送电子邮件验证的页面上,收听该节点上的更改。在更改时,调用
user.reload()
更新emailVerified
用户并user.getIdToken(true)
确保令牌已更新为最新声明。
另一种方法是上述方法的一种变体,即添加一个continueUrl
将在默认电子邮件验证上显示一个继续按钮以重定向到您知道用户已通过验证的您拥有的页面。您还可以使用与上述类似的机制,通过该页面上的实时数据库而不是登录页面来传递状态更改。
推荐阅读
- javascript - youtube 如何在您打开标签时而不是在网站加载后自动启动视频?
- mysql - 无法更新存储函数/触发器中的表“transferoffer”,因为它已被调用此存储函数/触发器的语句使用
- r - 使用 Hmisc cut2 参数 - max 参数如何工作?
- string - 在Powershell中将一个长字符串分成几行
- android-layout - 预览与模拟器不匹配
- mysql - 数据库设计 pk autoincrement vs uuid,不想在 url 中暴露 PK
- sql - 需要帮助创建此聚合 SQL 查询
- javascript - 从字符串中解析 FQDN 中的主机名
- windows - 我无法在我的 Windows Home 机器上安装 Docker Desktop 2.3.0.2。我的机器是最新的
- python - 如何列出文件