firebase - Facebook 主要电子邮件更改后,Firebase 不会更新 Facebook 用户的电子邮件
问题描述
我有一个启用 Facebook 登录的测试 Firebase 应用程序。我创建了一个测试 FB 帐户(调用它abc@xyz.com
),通过 FB 登录登录到 Firebase,请求 FB 配置文件数据,例如id
并email
通过GraphRequest
使用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
.
所以我创建了一个新的 FB 帐户abc@xyz.com
并尝试使用它登录我的 Firebase 应用程序。但由于我在 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.}
这意味着即使我已经从 FB 帐户发布了该电子邮件,并使用该已发布的电子邮件创建了一个新用户,我也无法再次登录我的应用程序(只要我选择了“一个帐户每个Firebase 身份验证设置中的电子邮件地址”选项)
所以我很好奇:在 FB 帐户上的主要电子邮件发生更改后,Firebase 是否有原因不更新第一个帐户上的电子邮件?它是一个错误吗?因为GraphRequest
响应返回了新电子邮件,所以如果没有其他用户已经注册了新电子邮件,Firebase 应该能够在技术上更新它。
解决方案
我想 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
}
推荐阅读
- php - 使用带有 href #id 的 php 路由
- python - 我可以在 except 子句中抛出自定义异常而不会导致:“在处理...期间”
- html - 如何修复 Bootstrap 使其不会弄乱登录表单和页脚?
- javascript - 测试库错误:mockConstructor(...):没有从渲染返回
- python - 在词法作用域和 for 循环中苦苦挣扎
- bash - grep 获取流中一行中的前 X 个字符
- python - GraphQL Ariadne python获取'不能为不可为空的字段返回null'虽然值不为空
- java - 可变数据输入到记事本
- pine-script - 解构多行函数
- math - 如何根据深度信息找到平坦区域