Facebook 主电子邮件更改后,Firebase 不会更新 Facebook 用户的电子邮件
Firebase doesn't update email of Facebook user after Facebook primary email changes
我有一个启用了 Facebook 登录的测试 Firebase 应用程序。我创建了一个测试 FB 帐户(称之为 abc@xyz.com
),通过 FB 登录登录到 Firebase,使用 accessToken
返回,一切似乎都是正确的。
然后我向 FB 帐户添加了另一封电子邮件(称之为 def@uvw.com
),将主电子邮件从 abc@xyz.com
更改为 def@uvw.com
,并从中删除了 abc@xyz.com
帐户。因此,从技术上讲,abc@xyz.com
现在已发布且未与 FB 帐户相关联。
现在,当我使用 def@uvw.com
登录 Firebase 时,Firebase 正确识别出它是之前登录的同一用户(因为 FB 凭证是相同的)。但是,当我在 Firebase 控制台中看到用户列表时,用户的电子邮件仍然显示 abc@xyz.com
.
所以我用 abc@xyz.com
创建了一个新的 FB 帐户,并尝试用它登录我的 Firebase 应用程序。但是由于我在 Firebase 身份验证设置中选择了 "One account per email address" 选项,我收到以下错误:
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.}
这意味着即使我已经从 FB 帐户释放该电子邮件,并使用该释放的电子邮件创建了一个新用户,我也无法再次登录我的应用程序(只要我选择了Firebase 身份验证设置中的 "One account per email address" 选项)
所以我很好奇:在 FB 帐户上的主电子邮件更改后,Firebase 是否没有更新第一个帐户上的电子邮件是有原因的吗?这是一个错误吗?因为 GraphRequest
响应 returns 新电子邮件,所以如果没有其他用户已经注册了新电子邮件,Firebase 在技术上应该能够更新它。
我想 Firebase 不知道电子邮件已经更改并且无法跟踪它,因为 Firebase 没有访问用户帐户详细信息的权限,只有您的应用可以执行此操作。
您需要自行管理电子邮件更改方案。以下是我在 iOS 上的操作方式:
1) 每次用户打开应用程序时,我都会执行图形 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
}
我有一个启用了 Facebook 登录的测试 Firebase 应用程序。我创建了一个测试 FB 帐户(称之为 abc@xyz.com
),通过 FB 登录登录到 Firebase,使用 accessToken
返回,一切似乎都是正确的。
然后我向 FB 帐户添加了另一封电子邮件(称之为 def@uvw.com
),将主电子邮件从 abc@xyz.com
更改为 def@uvw.com
,并从中删除了 abc@xyz.com
帐户。因此,从技术上讲,abc@xyz.com
现在已发布且未与 FB 帐户相关联。
现在,当我使用 def@uvw.com
登录 Firebase 时,Firebase 正确识别出它是之前登录的同一用户(因为 FB 凭证是相同的)。但是,当我在 Firebase 控制台中看到用户列表时,用户的电子邮件仍然显示 abc@xyz.com
.
所以我用 abc@xyz.com
创建了一个新的 FB 帐户,并尝试用它登录我的 Firebase 应用程序。但是由于我在 Firebase 身份验证设置中选择了 "One account per email address" 选项,我收到以下错误:
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.}
这意味着即使我已经从 FB 帐户释放该电子邮件,并使用该释放的电子邮件创建了一个新用户,我也无法再次登录我的应用程序(只要我选择了Firebase 身份验证设置中的 "One account per email address" 选项)
所以我很好奇:在 FB 帐户上的主电子邮件更改后,Firebase 是否没有更新第一个帐户上的电子邮件是有原因的吗?这是一个错误吗?因为 GraphRequest
响应 returns 新电子邮件,所以如果没有其他用户已经注册了新电子邮件,Firebase 在技术上应该能够更新它。
我想 Firebase 不知道电子邮件已经更改并且无法跟踪它,因为 Firebase 没有访问用户帐户详细信息的权限,只有您的应用可以执行此操作。
您需要自行管理电子邮件更改方案。以下是我在 iOS 上的操作方式:
1) 每次用户打开应用程序时,我都会执行图形 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
}