在 Android 中使用 Google/Facebook 时的 Firebase Auth 重复帐户

Posted

技术标签:

【中文标题】在 Android 中使用 Google/Facebook 时的 Firebase Auth 重复帐户【英文标题】:Firebase Auth duplicate account when using Google/Facebook in Android 【发布时间】:2021-01-25 15:32:11 【问题描述】:

我在我的 android 应用中集成了 Firebase 身份验证。

我找不到任何方法来拥有一个用于 google 和 facebook 身份验证的电子邮件地址的唯一帐户。 或者如果我在 Firebase 登录设置中不允许“允许使用相同的电子邮件地址创建多个帐户”,我会收到一条错误消息,指出已经有一个帐户在使用此电子邮件地址,或者 它将为每个登录方法创建 2 个唯一的 UID 帐户,使用相同的电子邮件地址..

是否有一个好的解决方法并设法拥有 1 个具有唯一 UID 和电子邮件地址的帐户,用于 facebook 和 google 登录方法?

【问题讨论】:

【参考方案1】:

您要查找的内容在 Firebase 中称为 account linking。

在此用例中,您首先使用这些提供商中的任何一个登录用户,然后从同一帐户链接来自其他提供商的凭据。因此,您最终会得到一个帐户,其中包含两个关联的提供商。

要了解哪些提供商与电子邮件地址相关联(例如,为用户呈现带有登录选项的 UI),您需要致电 fetchSignInMethodsForEmail

【讨论】:

谢谢,所以我查看了您提供的链接,这对我来说似乎是一个解决方案,但我不明白:如果我只为每个电子邮件地址启用 1 个帐户并且我的用户登录第一次使用谷歌,所以我需要链接他的谷歌凭据,然后如果他尝试使用相同的电子邮件但使用 facebook 提供商登录,那么它将起作用,因为他的凭据已经链接到 firebase 中的该电子邮件?如果是这样,那么您将如何处理它以进行进一步的登录,而无需在每次登录时都进行凭据链接?有没有一个选项可以查看用户是否已经有一个帐户? 当用户尝试使用第二个提供商登录时,您需要为该其他提供商创建创建凭据,如下所示:firebase.google.com/docs/auth/android/…。然后,您将这些凭据链接到原始帐户,从那一刻起,用户就可以使用任何一个链接的提供商登录到该帐户。 我明白了,但是如果帐户未登录,我将如何将这些凭据添加到原始帐户?假设我现在使用 Google 登录,然后我退出并尝试使用 Facebook 再次登录,两者都使用相同的电子邮件地址,当我尝试执行 auth.currentuser.linkWithCredential() 时它会抛出 NullPointerException,因为没有当前用户.. 什么是我在逻辑上错过了这里? 他们需要使用原始帐户登录。这就是您使用fetchSignInMethodsForEmail 的地方,这样您就可以检测到用户最初登录时使用的是什么,并要求他们再次使用该登录,以便您可以连接两个提供商。

以上是关于在 Android 中使用 Google/Facebook 时的 Firebase Auth 重复帐户的主要内容,如果未能解决你的问题,请参考以下文章

何时在 Android 中使用 RxJava,何时使用 Android 架构组件中的 LiveData?

在 Android 12 中使用 WorkManager

如何在 android 应用程序中使用 OSM 地图。?有啥教程可以学习在android中使用OSM吗?

如何在Mac中使用Android SDK

在 Android 中使用 Intent 在活动中传递 android 位图数据

无法在 Android 中使用 Android Crop 图像裁剪库