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

Can't get email from authenticated user with Facebook

我正在使用 Firebase 的 Facebook 登录来验证我的用户。我不得不将我的项目升级到 Firebase 3.x 因此我不得不改变这一点。例如,我用 user!.displayName 获得了 'fullname',用 user!.photoUrl 获得了 'photoUrl';但无法使用 user!.email 访问电子邮件,即使设置了 '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 帐户,但没有成功。可能是什么问题?

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

为了修复它,您需要 Prevent creation of multiple accounts with the same email address 在 Firebase 控制台的 Auth 部分:

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