Firebase 身份验证提供程序默默地将密码从密码更改为 google.com

问题描述 投票:0回答:4

我使用 Firebase 身份验证为我的网络应用程序提供三个提供商:电子邮件密码、谷歌或 Facebook。我已启用“每个电子邮件地址一个帐户”选项。

当用户使用电子邮件密码(使用 Gmail 地址)注册,然后使用 google 登录时,我预计会收到异常“auth/account-exists-with- different-credential”,但我没有。他的providerId 更改为 google.com 并且他不能再使用他的密码(抛出“auth/wrong-password”)。

这是正常行为吗?

firebase-authentication
4个回答
3
投票

Firebase 身份验证具有某些电子邮件地址的首选提供商的概念。最常见的一个是 google.com 是

@gmail.com
地址的首选提供商,但 Facebook 和 Microsoft 帐户也存在这些地址。

如果现有帐户稍后从首选提供商再次注册,则该提供商将覆盖现有用户帐户。没有办法改变这种行为(据我所知)。

另请参阅:


1
投票

如果您在用户注册后将

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)

但当然最好验证他们的电子邮件地址。仅当您知道他们拥有电子邮件地址时才使用此功能。


0
投票

这就是我解决问题的方法: https://firebase.google.com/docs/auth/android/account-linking

只需链接“帐户”即可。


0
投票

2023 年更新:

您现在可以选择是否允许“用户帐户链接”。例如,如果您不允许多个帐户使用同一电子邮件地址,则用户无法创建使用具有电子邮件地址 [电子邮件受保护] 的 Google 帐户登录的新帐户(如果已有帐户登录)使用电子邮件地址 [电子邮件受保护] 和密码。

如果您允许多个帐户使用同一电子邮件地址,则您的应用程序的登录流程不能依赖电子邮件地址来识别用户帐户。

您可以在 Firebase 身份验证的设置下找到它。

使用此功能有一些注意事项,请阅读此处

© www.soinside.com 2019 - 2024. All rights reserved.