我希望我的用户可以使用许多不同的提供商登录,但如果他们只使用一个电子邮件地址,他们将获得相同的结例如,在stackoverflow中我可以通过Facebook,Google登录......但我仍然可以保留我的 Profiles 以及我的帖子......
在Firebase Web中,例如,如果我的用户使用电子邮件/密码提供商创建了帐户,则他的电子邮件=“ex@gmail.com”password =“123456” . 此帐户有uid =“account1”,我使用此uid作为密钥在Firebase数据库中存储有关他的其他信息 .
有一天,他选择谷歌提供商和Facebook提供商登录(仍然是ex@gmail.com),我在auth设置中测试2个案例:
-
“防止使用相同的电子邮件地址创建多个帐户”:新的Google登录将覆盖旧的“account1”,由于错误,我无法使用“ex@gmail.com”创建新的Facebook帐户:“帐户已存在相同的电邮地址“ . 这两个我都不想发生
-
“允许使用相同的电子邮件地址创建多个帐户”:使用此选项我可以使用相同的电子邮件地址创建许多帐户,但他们有不同的uid,我不知道如何将这些uid链接到“account1”?在Google和Facebook登录后,我也无法收到电子邮件(email = null) .
所以firebase可以帮助我在很多应用程序中做我喜欢的事情(通过许多不同方式登录但结果相同)?
2 回答
Firebase Auth支持“禁止使用相同的电子邮件地址创建多个帐户” . 但Google是一个特例,因为它是经过验证的提供商,并会使用相同的电子邮件覆盖未经验证的帐户 . 例如,如果创建了电子邮件/密码帐户但未经过验证,然后用户使用相同的电子邮件登录Google,则会覆盖旧密码并取消链接,但会返回相同的用户(相同的uid) .
对于其他情况,这是它的处理方式 .
假设您使用电子邮件/密码通过帐户user@example.com使用电子邮件/密码登录 . 然后,用户尝试使用相同的电子邮件与Facebook提供商登录 . Auth后端将抛出错误并且将需要链接 . 完成此操作后,用户可以使用任一帐户登录 .
这是一个例子:
@bojeil的上述代码是正确的除非它错过了一行 .
你必须先将facebookprovider初始化,然后再将其作为参数传递 .