cbd*_*per 5 javascript firebase reactjs firebase-authentication
我目前正在使用 Firebase 开发身份验证系统。我希望我的系统接受电子邮件/密码、Google 和 Facebook 作为注册和登录方法。
到目前为止,一切都很好。当用户分别使用每种方法进行注册时,一切都会正常进行。当用户想要使用另一种方法注册并且我需要将新方法链接到同一用户之前使用另一种方法注册的同一帐户时,问题就开始了。
我的示例将仅提及电子邮件/密码和 Google 方法。
注意:我的 Firebase 身份验证系统设置为每封电子邮件仅接受 1 个帐户。
示例1(工作正常):
示例2(问题):
Google 群组 - Firebase Talk - 关于此问题
从上面的链接和 StackOverflow 上的其他一些相关问题,我了解到这种行为是由于安全问题而出现的,这就是为什么 Google 比其他身份验证提供商拥有“更高的优先级”,因为您可以真正信任这些用户并且他们的电子邮件。
但删除用户创建的密码对我来说似乎是错误的。更不用说在没有任何警告的情况下这样做了。
而且,这似乎与以下 Firebase 帮助页面冲突:
Firebase 帮助 - 允许多个帐户使用同一电子邮件地址
从上面链接的帮助页面:
您可以配置用户是否可以创建使用相同电子邮件地址但链接到不同登录方法的多个帐户。例如,如果您不允许多个帐户使用同一电子邮件地址,则用户无法创建使用电子邮件地址为 ex@gmail.com 的 Google 帐户登录的新帐户(如果已有帐户使用该帐户登录)电子邮件地址 ex@gmail.com 和密码。
从上面的摘录中,我了解到的是,如果我之前使用电子邮件/密码组合创建了该帐户,则我不应该能够使用 Google 创建该帐户。但事实并非如此,如示例 2 所示。非常奇怪!
现在真正的问题是:
由于我无法更改 Firebase 行为,因此我正在考虑更改 Firebase 身份验证系统,以允许每个电子邮件有多个帐户,并使用电子邮件作为主键(而不是使用Firebase 身份验证系统),因为在 Firebase 身份验证系统中,电子邮件/登录方法的每种组合都将被视为不同的帐户,因此每个组合都将具有不同的 userID。
前任:
johndoe@gmail.com / 密码 = 用户 ID X
johndoe@gmail.com / Google 登录 = UserID Y
johndoe@gmail.com / Facebook 登录 = UserID Z
上述所有帐户都将使用 johndoe@gmail.com 作为“主键”(集合)在 Firestore 中存储和访问数据。
但由于我还处于开发早期,这似乎有点“hacky”,我可能会在未来带来一些复杂性。
你有什么建议吗?这里的主要目标是让我的用户使用他们想要的任何方法进行注册和登录。所有方法都应该允许他们访问我的应用程序中的数据(将位于 Firestore 中)。
我拒绝默默删除用户之前创建的密码,只是为了让他们注册并加入 Google。
还有其他想法或评论吗?
抱歉问了这么长的问题,但我认为它很好地说明了问题。
一种选择是强制密码用户在注册后立即验证其电子邮件地址。在示例 #2 中,如果电子邮件地址已通过验证(例如通过向电子邮件地址发送验证链接并且用户已点击该链接), Firebase 将保留帐户的现有密码。
| 归档时间: |
|
| 查看次数: |
2078 次 |
| 最近记录: |