需要关于在生产应用程序-Firebase中添加身份验证提供程序的建议吗

需要关于在生产应用程序-Firebase中添加身份验证提供程序的建议吗,firebase,firebase-realtime-database,firebase-authentication,facebook-authentication,Firebase,Firebase Realtime Database,Firebase Authentication,Facebook Authentication,一周前我发布了一个应用程序,现在已经有几百个用户了。我使用的唯一身份验证提供商是gmail,我的数据库结构如下所示: - AllUsersInfo: - $userEmail // example: "blah@gmail.com" - "uid": $userUID // example: "1234567890" - "name": $userDisplayName // example: "

一周前我发布了一个应用程序,现在已经有几百个用户了。我使用的唯一身份验证提供商是gmail,我的数据库结构如下所示:

- AllUsersInfo:
   - $userEmail                     // example: "blah@gmail.com"
       - "uid": $userUID            // example: "1234567890"
       - "name": $userDisplayName   // example: "John Doe"

- AllUsersData
   - $userUID                       // example: "1234567890"
       - "userData": { ... }
基本上,我创建了一个节点(
AllUsersInfo
),将用户的电子邮件作为密钥,用户的uid和名称作为值。另一个节点(
AllUsersData
)实际上包含每个用户在应用程序中生成的数据作为值,键是他们的uid。我将这两个节点分开,因为顶部的节点很轻,适合搜索,而底部的节点更安全,包含更多数据

问题:

现在,我正在添加Facebook身份验证,并且正在努力了解如何保持数据库结构的完整性。问题是,如果有人以前用gmail登录,现在又在facebook上注册,他们的facebook帐户的电子邮件可能与他们以前注册的gmail相同。这将导致
AllUsersInfo
节点中出现重叠,因为键在Firebase中必须是唯一的

我正在努力想办法处理这些重叠的案件。如果我在
AllUsersInfo
节点中用新名称和uid覆盖电子邮件以前的数据,则旧用户的身份验证将无法检索。如果我更改
AllUsersInfo
的结构以允许多个uid和名称,则会导致一些向后兼容性问题


有谁能帮我找到一个很好的解决方案来解决这个潜在的数据库结构重构问题吗?

我对这个问题提出的解决方案,以及另一个问题,即Facebook用户可能甚至没有电子邮件(他们使用电话号码创建帐户),如下所示:

通过facebook(或gmail)对用户进行身份验证后,检查他们的电子邮件是否已经存在于数据库中,或者是否没有电子邮件(电话号码情况),在这种情况下,会向他们显示一个屏幕,要求他们键入一封电子邮件以用于此新帐户


这不是最好的解决方案,但它解决了这两个问题。

目前,你的应用程序只有数百个用户。我建议您使用Firebase UI库来处理所有这些问题,您只需编写3-5行代码

是指向Firebase UI Android库的链接。通过以下步骤将其添加到您的项目中,并将您的应用程序连接到Firebase

完成后,从Firebase控制台启用Google和Facebook登录,按照步骤操作,然后将这些行添加到您的应用程序中

startActivityForResult(
AuthUI.getInstance()
    .createSignInIntentBuilder()
    .setProviders(Arrays.asList(
                                new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build(),
                                new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build()
                                ))
    .build(),
RC_SIGN_IN);

现在所有的测试用例都由Firebase处理,您可以坐下来放松一下。

具体一点如何