我使用 Firebase 身份验证为我的网络应用程序提供三个提供商:电子邮件密码、谷歌或 Facebook。我已启用“每个电子邮件地址一个帐户”选项。
当用户使用电子邮件密码(使用 Gmail 地址)注册,然后使用 google 登录时,我预计会收到异常“auth/account-exists-with- different-credential”,但我没有。他的providerId 更改为 google.com 并且他不能再使用他的密码(抛出“auth/wrong-password”)。
这是正常行为吗?
Firebase 身份验证具有某些电子邮件地址的首选提供商的概念。最常见的一个是 google.com 是
@gmail.com
地址的首选提供商,但 Facebook 和 Microsoft 帐户也存在这些地址。
如果现有帐户稍后从首选提供商再次注册,则该提供商将覆盖现有用户帐户。没有办法改变这种行为(据我所知)。
另请参阅:
如果您在用户注册后将
email_verified
设置为 True,则当他们使用未经电子邮件验证的登录提供商登录时,他们的登录提供商不会被替换。
例如使用Python firebase_admin:
from firebase_admin import auth
# Get token from request
authorized_user = auth.verify_id_token(token)
auth.update_user(authorized_user["uid"], email_verified=True)
但当然最好验证他们的电子邮件地址。仅当您知道他们拥有电子邮件地址时才使用此功能。
这就是我解决问题的方法: https://firebase.google.com/docs/auth/android/account-linking
只需链接“帐户”即可。