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,电子邮件必须是有效字符串

如何捕获 Firebase Auth 特定异常

尝试导入错误:“app”未从“firebase/app”导出(导入为“firebase”)