Firebase 未从 Facebook 捕获电子邮件/电话
Posted
技术标签:
【中文标题】Firebase 未从 Facebook 捕获电子邮件/电话【英文标题】:Firebase Not Capturing Email/Phone from Facebook 【发布时间】:2017-07-18 05:15:42 【问题描述】:当用户使用 Facebook 登录应用程序时,我能够捕获并显示他们的全名;但是,电子邮件和电话号码都没有出现。我已经尝试过“每个电子邮件地址一个帐户”以及“每个电子邮件多个帐户”。我已经使用其电子邮件地址绝对尚未在 Firebase 中注册的帐户对其进行了测试。我错过了什么以至于电子邮件/电话没有被捕获?这一切都适用于 Google 帐户。
let name = Auth.auth().currentUser?.displayName // works!
let email = Auth.auth().currentUser?.email // nil- why?
let phone = Auth.auth().currentUser?.phoneNumber // nil -why?
登录过程是标准的 Firebase w/Facebook,如下所示:
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!)
if let error = error
print(error.localizedDescription)
else
if FBSDKAccessToken.current() != nil
let credential = FacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
Auth.auth().signIn(with: credential) (user, error) in
if let error = error
print (error.localizedDescription)
根据下面的 cmets 进行更新。以下在检查 userInfo 的内容时也会产生一个 nil 电子邮件和电话。我知道电话可能就是这样,但电子邮件似乎应该可以工作。
let userInfo = Auth.auth().currentUser?.providerData
【问题讨论】:
可能是 Facebook 用户不允许访问电子邮件或电话号码 @ArpitJain 我使用的是我自己的帐户,它确实允许访问。 【参考方案1】:*** phoneNumber currentUser.phoneNumber
仅适用于经过 Firebase 验证的电话号码。如果您有该 Facebook 电话号码,则可以使用 currentUser.updatePhoneNumber API 来验证该号码(您需要完成整个流程)。否则,您可以等待即将发布的 Admin node.js API 为现有用户设置具有管理员权限的电话号码:https://github.com/firebase/firebase-admin-node/commit/68563c4b2c8128fbc45fc65bad3f6730d320b539
对于邮箱,如果是“一邮箱多个账号”,需要通过currentUser.updateEmail
自行设置。您可以从currentUser.providerData
获取包含 Facebook 提供商数据的 Facebook 电子邮件。
【讨论】:
感谢您的回答。关于电子邮件地址,providerData 中为 nil。其他字段不包括 photoURL,但对于 Facebook,电子邮件仍然为零(谷歌没问题)。我也不允许每封电子邮件有多个帐户。 您可以尝试使用其他 Facebook 帐户吗?可能是此帐户不允许访问这些字段。我知道您另有说法,但测试另一个帐户只是为了检查此问题是否与该特定帐户有关。 我用两个不同的账户测试过。同样的问题。以上是关于Firebase 未从 Facebook 捕获电子邮件/电话的主要内容,如果未能解决你的问题,请参考以下文章
在 Facebook、Twitter 和电子邮件上捕获视频共享
Firebase忘记密码 - 如何识别用户是否使用电子邮件或Facebook登录?
尝试导入错误:“initializeApp”未从“firebase”导出(导入为“firebase”)[关闭]
React Firebase - 未捕获的异常signInWithEmailAndPassword,电子邮件必须是有效字符串