首页 > 解决方案 > 如何使用 Firebase 身份验证收听电子邮件验证事件并做出本机反应?

问题描述

编辑- 这个问题仍然没有答案。有一个想法可以听onIdTokenChanged,但是令牌每小时刷新一次,这对我来说不是实际的解决方案。我在这里发布了后续问题,如果人们可以给予我帮助,因为我从一个星期开始就坐在这个问题上。

我正在编写一个简单的本机反应应用程序,我只想在用户验证他们的电子邮件后才显示我的主页。据我了解,没有可以用来收听用户已验证其电子邮件的事件的侦听器。我正在使用firebase.auth().onAuthStateChanged((user) => {....}),但在用户登录或注册后调用了监听onAuthStateChanged器,而不是在用户验证了他们的电子邮件后。建议使用的地方很少,firebase.auth().user.reload()以便重新加载当前用户并从数据库中获取验证状态。但是,我不认为这是一个解决方案,因为我不知道什么时候应该重新加载当前用户,即我不知道何时点击了验证链接。所以这个问题的可能解决方案是:

  1. 向用户发送一个 6 位确认码,并等待用户在 App 中输入;用户键入后,如果代码相同,我刷新用户。但是我不知道如何使用 firebase 发送自定义验证电子邮件。我检查了文档,但这对我没有帮助。如果有人可以向我指出用 react native 编写的示例,或者使用自定义电子邮件编写一个小的工作示例,我可以将其发送给用户(同样是 react native),那将是授权!编辑- 这似乎不是可能的解决方案,因为 Firebase 不允许您自定义电子邮件
  2. 我是否可以覆盖 onAuthStateChanged 侦听器?如果用户的电子邮件已经过验证,它会监听更改吗?如果这是一个好主意,有人可以指出我在 react-native 中的当前onAuthStateChanged实现,所以我可以在覆盖时将其视为“灵感”?或者如果有人以前做过类似的事情,你能给我举个例子吗?
  3. 我已经阅读了一些使用深层链接并在单击链接时插入事件的建议,但我不确定如何执行此操作,或者即使这是解决问题的正确方法。
  4. 有些人建议firebase.auth().user.reload()在应用程序关闭并重新打开时使用。这是假设当用户收到链接后,为了让他们点击链接,他们需要关闭应用程序,然后再次重新打开它。我认为这是一个非常强的假设,考虑到他们可能会通过笔记本电脑验证他们的电子邮件并且永远不会关闭应用程序,所以我认为这也不是一个好的解决方案。

显然,这似乎是一个众所周知的问题,但没有多少好的解决方案。我认为最好的解决方案是向用户发送 6 位验证码,在验证码确认后,我会重新加载当前用户,选择该emailVerified字段,它将设置为 true,然后我将显示主屏幕. 但是,有人可以帮助我如何在 react native 和 firebase 中发送自定义电子邮件吗?

如果有人有任何其他建议,请告诉我!

标签: firebasereact-nativefirebase-authentication

解决方案


我是否可以覆盖 onAuthStateChanged 侦听器?如果用户的电子邮件已经过验证,它会监听更改吗?

onAuthStateChanged用户的身份验证状态更改时调用 ,因此当他们从未登录变为已登录时,反之亦然。设置的电子邮件验证标志不是身份验证状态的更改,因此在这种情况下不会调用回调。

可以改为 监听onIdTokenChanged,每次 ID 令牌更改时都会触发。由于 ID 令牌包含是否验证用户电子邮件的标志,因此onIdTokenChanged在更改时也会调用回调。


推荐阅读