无法使用 firebase v4、javascript 触发重新身份验证

Ilj*_*lja 2 javascript firebase firebase-authentication

以前,我可以onAuthStateChanged在用户使用这些相继调用的方法验证其电子邮件后无需注销用户即可触发。

firebase.auth.currentUser.reload()
firebase.auth.currentUser.getToken(true)
Run Code Online (Sandbox Code Playgroud)

我将它们更新为getIdToken

firebase.auth.currentUser.reload()
firebase.auth.currentUser.getIdToken(true)
Run Code Online (Sandbox Code Playgroud)

然而,对于 firebase v4,以前的和新的方法不再重新触发onAuthStateChange。现在还有办法实现吗?即,对于注册流程,用户不需要注销 -> 注册 -> 验证电子邮件 -> 单击调用上述 2 个函数的“继续”按钮 ->onAuthStateChanged触发用户电子邮件现在正在验证。

Fra*_*len 5

在 Firebase 身份验证 2.x 版本中,仅当用户的身份验证状态更改时才会调用身份验证状态更改处理程序。所以当他们登录或退出时。

在 Firebase 身份验证 SDK 3.x 版本中,还会调用相同的回调来进行令牌刷新。但这会导致开发人员在有效更新其 UI 时遇到问题,因为即使身份验证状态未更改(即使令牌发生更改),也会调用此回调。

这就是为什么这种行为在 v4 中确实发生了变化:onAuthStateChanged令牌刷新不再触发。在这种情况下,有一个单独的onIdTokenChanged()方法触发:https ://firebase.google.com/docs/reference/js/firebase.auth.Auth#onIdTokenChanged

从那里:

添加一个观察者来监视已登录用户的 ID 令牌的更改,其中包括登录、注销和令牌刷新事件。firebase.auth.Auth#onAuthStateChanged此方法与 4.0.0 之前的版本具有相同的行为。

例子:

firebase.auth().onIdTokenChanged(function(user) {
  if (user) {
    // User is signed in or token was refreshed.
  }
});
Run Code Online (Sandbox Code Playgroud)