firebase google 提供商登录覆盖其他登录提供商的理想解决方案

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

我一直在尝试 firebase 多提供商登录。我启用了电子邮件和谷歌。

我在某处读到,如果电子邮件尚未验证并且用户尝试使用谷歌登录,则用户帐户将被覆盖,尽管使用相同的用户 ID。

原因是 gmail 是值得信赖的提供商,Firebase 会取消之前未经验证的电子邮件的链接,并使用 google 用户数据覆盖该数据。

根据我从这篇评论中读到的内容,这是 Firebase 的安全功能和预期行为。

我的问题是,当用户一直使用电子邮件和密码使用其帐户时,如果用户突然使用 gmail 登录,那么他将无法再使用电子邮件和密码登录,我该如何处理这种情况。

是的,用户可以简单地使用谷歌登录登录,并且仍然是相同的用户帐户,只是被谷歌覆盖,但有些用户可能认为这是一个错误,不是一个好的用户体验。

firebase firebase-authentication
2个回答
1
投票

我遇到了同样的问题,我有一个可能适合你的解决方案。

我正在为用 Kotlin 编写的 Android 应用程序使用 Firebase 身份验证。我不确定您使用的是什么平台和语言,但如果您能够转移逻辑,该解决方案也应该适合您。

对于 Android,您可以使用

GoogleSignIn.getSignedInAccountFromIntent(data)
来验证 Google 帐户。这里
data
是一个
Intent
类型的对象,它拥有身份验证所需的所有数据。

我能够从

data
获取用户电子邮件,如果之前使用同一电子邮件登录应用程序,我会拒绝登录并显示相应的消息。

以下是我用来获取用户电子邮件的代码行。

val googleUser: GoogleSignInAccount = data!!.getParcelableExtra("googleSignInAccount")!!

我希望这能为您指明正确的方向,如果解决方案不是您正在寻找的语言,我们深表歉意。


0
投票

您可以使用阻止功能来防止这种情况,并向用户显示错误以验证他们的电子邮件。

代码示例在这里:https://stackoverflow.com/a/78149428/5651481

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