在 Angular 4, Firebase Authentication, Login with Google 导致电子邮件登录停止工作,直到我刷新

In Angular 4, Firebase Authentication, Login with Google causes email login to stop working until I refresh

我正在使用 AngularFire2 身份验证。我们可以使用 email/pass 登录(电子邮件已验证)或使用 Google 登录。如果我使用电子邮件登录,一切都很好。我注销,我登录,来回没有问题。然后我用 Google 登录,然后注销,也没有问题。但是,如果我使用 Google 登录,然后注销,除非我刷新页面,否则我无法使用电子邮件登录!即使我完全注销了,每次我在使用 Google 登录并注销后尝试登录时,我都会得到 "auth/invalid-email"。如果我刷新页面,我可以使用电子邮件再次登录而不会出现任何问题。有人知道这是什么行为吗?

与此问题相关:Firebase Overwrites Signin with Google Account

在这种特殊情况下,这是出于安全原因。 这是一个常见的场景。我用你的 gmail 地址注册了一个 email/password 帐户。该帐户未经验证(emailVerified 为 false)。然后,您尝试使用同一电子邮件登录您的 Google 帐户,该电子邮件是经过验证的 Google 电子邮件。如果我设置的密码还在,那我基本上就可以登录你的账号了。为了防止这种情况,Firebase Auth 将取消链接所有未经验证的提供商。

如果您在 Google 登录之前通过发送电子邮件验证并完成验证流程来验证帐户,则只能保留旧密码提供商。

我不知道为什么,但是由于刷新页面有效,所以我在退出后刷新了它:

location.reload();

不确定这是否是正确的方法,但它确实有效! ... 如果 auth.signOut() 做得更好,我会更开心。