我目前正在为我的Firebase FiRecovery React应用程序开发一个入门套件。
我一直在努力找出为每个用户处理多个登录方法的最佳方法。
起初,我试图这样做,使用Firebase Auth并激活“每封电子邮件一个帐户”限制(这是默认设置)。
但在多次尝试实现我的预期行为失败后,我决定放弃并将我的Firebase身份转换为“允许每个电子邮件有多个帐户”。
我的主要目标是:
如果我为我的用户提供3种注册和in方法(例如:电子邮件/密码Google Facebook),我觉得我应该尊重这3种方法,无论它们的使用顺序如何。
事实是,“每封电子邮件一个帐户”的限制是不可能的,因为如果你的用户第一次注册电子邮件/密码,如果他下次注册谷歌,Firebase将删除他的密码。它会悄悄地这样做,您的用户永远不会知道为什么他的密码不再有效(至少我从研究中了解到了这一点,并向Firebase支持人员提出了一个问题)。
这是出于安全原因,因为Google Provider比其他提供商具有更高的优先级(基本上是因为Google电子邮件返回时经过了隐式验证,在这种情况下)。我明白这一点,但我只是认为如果您删除用户的密码而不让他知道它发生了,那将会造成糟糕的用户体验。
我还有一个更深入的问题
但是有了这个问题,我想知道以下几点:
在允许每个用户使用多个帐户的同时,我必须使用他们的email
作为他们的uniqueID
来保存我的用户在FiRecovery上的数据,因为使用每个电子邮件的多个帐户/登录方法,每个帐户最终将具有由Firebase Auth系统生成的不同uid
,但他们都应该可以访问我的应用程序上的同一个帐户,因此我必须使用他们的email
作为uniqueID
)。
注意:从我的应用程序的角度来看:Firebase Auth上使用相同电子邮件地址的每个帐户对应于相同的用户。
例如:
>
Firebase Auth为创建一个帐户myUser@gmail.com/电子邮件密码<代码>uid=x
myUser@gmail.com使用Google登录注册
Firebase auth为创建另一个帐户myUser@gmail.com/谷歌登录<代码>uid=y
myUser@gmail.com使用Facebook登录注册
Firebase auth为创建另一个帐户myUser@gmail.com/facebook登录<代码>uid=z
由于每个帐户都有不同的uid
,因此我将让他们都可以使用他们的电子邮件
作为uniqueID
访问FiRecovery上的相同数据,在这种情况下,每个帐户都是相同的。
问题
虽然这似乎解决了我的问题,但我担心将来可能会带来的复杂情况。你们中的任何一个,更有经验的Firebase开发人员,可能会想到为什么我不应该使用上述方法解决问题?
请记住,从我的应用程序的角度来看:“用户是电子邮件”,而不是Firebase Auth上的帐户。每个用户在Firebase Auth上可能有1个、2个或3个帐户。
您是否看到与以下方面的潜在问题/冲突:
谢谢你的帮助。
我看不出你所描述的设置有任何问题——而且,由于他们的电子邮件是你仅有的共享身份信息——你似乎没有太多选择。只要你围绕电子邮件地址构建一切。。。跳过任何与firebase生成的UID相关的内容,那么就可以了。
我要给你的一个警告是,当你在数据库中写邮件时,你应该小心地从电子邮件地址中去掉一些特殊字符。这些数据库文档包括有关Firebase数据库密钥中不允许的字符的信息:
如果您创建自己的密钥,它们必须是UTF-8编码的,最多可以是768字节,并且不能包含 ., $, #, [, ], /, 或ASCII控制字符0-31或127。您也不能在值本身中使用ASCII控制字符。
其中许多是电子邮件地址的有效部分。
这是我能想到的一个重要的警告项目,否则你应该准备好了。免责声明,我对FCM没有太多的经验,所以如果你想在未来某个时候添加一个移动客户端,我可能还没有注意到另一个考虑因素。
在Firebase控制台中,我特别将其设置为只允许“每个电子邮件地址一个帐户”。这可以在“高级”下的“登录方法”选项卡上找到。 我有一个使用谷歌登录方法创建的帐户,它有一个类似“me@gmail.com”的地址。如果我选择通过Facebook使用一个也使用“me@gmail.com”的帐户登录,Firebase允许它,但用户实体中的电子邮件地址为空除外。 Firebase文档指出: 如果不允许使用
我正在尝试允许用户搜索一个数据库和回显结果,事情是我想搜索多个表。我知道我可以从x1,x2中选择*,但是行的名称是其他的,所以当另一行是username2时,我不能回显$row['username']。也许,如果它是可能的,类似于if($row==whatever),idk。谢谢你的帮助。 编辑:找到了这样做的方法。类似这样的工作:
您可以通过此界面创建和管理域的电子邮件帐户。 您可以创建电子邮件地址,配置邮件客户端,更改密码以及直接访问您的Webmail。 创建电子邮件地址 要为您的域创建电子邮件地址,请按以下步骤操作 - Step 1 - 单击cPanel主页的“电子邮件”部分中的“ Email Accounts链接。 Step 2 - 在电子邮件帐户中,您会在顶部找到添加电子邮件帐户。 Step 3 - 添加您要创建的电
…如果您不允许多个帐户使用相同的电子邮件地址,则用户无法创建使用带有电子邮件地址的Google帐户登录的新帐户ex@gmail.com如果已经有一个帐户使用电子邮件地址登录ex@gmail.com和密码。 我能够使用Google提供商登录已经通过电子邮件提供商注册的同一电子邮件,因此Google提供商替换了电子邮件提供商,然后无法使用FirebaseAuthInvalidCredentialsEx
在我的场景中,我使用的是一个联邦用户存储,其中包含大量用户,当用户使用Google、Azure等登录时,我需要Keycloak来访问链接到该用户的所有电子邮件。因为Keycloak使用电子邮件作为来自社交登录提供者的身份验证响应的唯一标识符。如果没有所需的电子邮件作为主电子邮件,Keycloak将不允许该用户通过social IdP登录
我在主AWS帐户中配置了SES,在其他AWS帐户中配置了Cognito用户池。我想使用主帐户的SES从Cognito发送电子邮件通知。我创建了身份策略并附加到SES电子邮件地址。然而,在其他AWS帐户的Cognito用户池中,它没有显示任何电子邮件地址。我该怎么解决这个问题? 我在同一个帐户中检查了Cognito,它显示了我在SES中验证过的电子邮件身份,但在其他帐户的Cognito用户池中没有。