我有一个启用了Facebook登录的Firebase测试应用程序。我创建了一个测试FB帐户(称为abc@xyz.com
),通过FB登录登录到Firebase,并使用{{}通过id
请求了FB配置文件数据,例如email
和GraphRequest
1}}返回,一切似乎正确。
然后,我向FB帐户添加了另一封电子邮件(称为accessToken
),将主电子邮件从def@uvw.com
更改为abc@xyz.com
,并从该帐户中删除了def@uvw.com
。因此,从技术上讲,abc@xyz.com
已发布,并且不与FB帐户关联。
现在,当我使用abc@xyz.com
登录到Firebase时,Firebase会正确识别出它与之前登录的用户相同(因为FB凭据相同)。但是,当我在Firebase控制台中看到用户列表时,该用户的电子邮件仍然显示def@uvw.com
。
因此,我使用abc@xyz.com
创建了一个新的FB帐户,并尝试使用该帐户登录到我的Firebase应用程序。但是,由于我在Firebase身份验证设置中选择了“每个电子邮件地址一个帐户”选项,因此出现以下错误:
abc@xyz.com
这意味着,即使我已经从FB帐户释放了该电子邮件,并使用该释放的电子邮件创建了新用户,但我永远无法再次登录我的应用程序(只要我选择了“ Firebase身份验证设置中的“每个电子邮件地址一个帐户”选项)
所以我很好奇:FB帐户的主要电子邮件更改后,Firebase是否没有更新第一个帐户的电子邮件的原因?是虫子吗?由于Error Domain=FIRAuthErrorDomain Code=17012 "An account already exists with
the same email address but different sign-in credentials. Sign in using a
provider associated with this email address." UserInfo=
{error_name=ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL,
FIRAuthErrorUserInfoEmailKey=abc@xyz.com, NSLocalizedDescription=An
account already exists with the same email address but different sign-in
credentials. Sign in using a provider associated with this email address.}
响应会返回新电子邮件,因此从技术上来说,如果没有其他用户已经注册了新电子邮件,则Firebase应该能够对其进行更新。
答案 0 :(得分:1)
我认为Firebase不知道电子邮件已更改并且无法跟踪,因为Firebase没有访问用户帐户详细信息的权限,只有您的应用程序可以执行此操作。
您需要自行管理电子邮件更改方案。这是我在iOS上执行的操作:
1)每次用户打开应用程序时,我正在执行Graph API请求以获取新的用户数据。该请求返回的电子邮件将与该用户存储在Firebase中的电子邮件进行比较。
2)一旦我检测到电子邮件不同,我将更新存储在Firebase中的电子邮件,使其与Facebook的电子邮件保持同步。在iOS SDK中为:
Auth.auth().currentUser?.updateEmail(to: newEmail) { error in
// if there was no error - the firebase now has the latest email
}