无法通过Facebook从经过身份验证的用户处获取电子邮件

时间:2016-06-14 18:09:09

标签: swift facebook facebook-graph-api firebase firebase-authentication

我正在使用Firebase的Facebook登录来验证我的用户身份。我不得不将我的项目升级到Firebase 3.x,因此我不得不改变这一点。我用user!.displayName和'photoUrl'获得'fullname',例如user!.photoUrl;但即使设置了“电子邮件”范围,也无法使用user!.email访问电子邮件。

@IBAction func facebookLoginDidTouch(sender: AnyObject) {
let facebookLogin = FBSDKLoginManager()

facebookLogin.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: {
    (facebookResult, facebookError) -> Void in
    if facebookError != nil {
        print("Facebook login failed. Error \(facebookError)")
    } else if facebookResult.isCancelled {
        print("Facebook login was cancelled.")
    } else {
        let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString)

        FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in
            if error != nil {
                print("Login failed. \(error)")
            } else {
                print("Logged in!")
                print(user!.displayName) // works
                print(user!.photoUrl)    // works
                print(user!.email)       // returns nil
            }
        })
    }

我非常确定该电子邮件是有效的,因为在我升级到Firebase 3.x之前,它曾用于获取电子邮件。我也试过多个Facebook帐户,但没有运气。可能是什么问题?

1 个答案:

答案 0 :(得分:2)

从以前版本的Firebase Auth迁移到Firebase Auth 3.x时会发生这种情况。它与能够在先前版本中使用相同电子邮件地址创建多个帐户有关。有关详细信息,请查看相关的issue

要修复此问题,您需要在Firebase控制台的Auth部分中gulp taskA taskB

以下是显示Firebase控制台中该选项的屏幕截图。

Console Screenshot.