ios - Swift - 从 facebook 登录中获取错误

标签 ios facebook firebase firebase-authentication swift4

刚开始我已经看过很多例子,但似乎找不到解决方案。好吧,我以为我做到了,但它似乎不起作用。

我想做的是使用 Facebook 的 Firebase 身份验证登录方法,顺便说一句。我的问题是当 facebook 方法抛出电子邮件/凭据已存在的错误时,我想链接密码 auth 凭据和 facebook auth 凭据。我读了here我可以使用 error.email 但它没有给我访问 email.error 的选项。我可能遗漏了一些东西,我花了很多时间试图弄明白。

这是我的代码:

func signInFacebookUser() {
    let fbLoginManager = FBSDKLoginManager()
    fbLoginManager.logIn(withReadPermissions: ["public_profile", "email"], from: self) { (result, error) in
        if let error = error {
            self.errorMessagePopUp(title: "Failed to login", message: error)
            return
        }

        guard let accessToken = FBSDKAccessToken.current() else {
        print("Failed to get access token")
        return
   }

   let credential = FacebookAuthProvider.credential(withAccessToken: accessToken.tokenString)

   Auth.auth().signIn(with: credential, completion: { (user, error) in
        if let error = error {

        let errCode = AuthErrorCode(rawValue: error._code)!

        switch errCode {

              case .accountExistsWithDifferentCredential:
              // somehow obtain email right here.
              self.showSigninForm(attributes: self.attributes(), style: .light)
              return

             default:
             return
          }
       }

       self.performSegue(withIdentifier: "signInBtnPressed", sender: nil)
    })
  }
}

最佳答案

这适用于我的 Swift4

@objc func loginButtonClicked() {
    var alertController = UIAlertController()
    let loginManager = LoginManager()
    loginManager.logIn(readPermissions: [ReadPermission.email], >viewController: self, completion: {loginResult in
                    switch loginResult {
                    case .failed(let error):
                        print(error)
                    case .cancelled:
                        print("User cancelled login.")
                    case .success(_, _, let accessToken):
                        print(accessToken)

                    }

    })
}
 func getDataUser() {
        let request = GraphRequest(graphPath: "me?fields=first_name,last_name,email",
                                   parameters:[:],
                                   httpMethod: .GET)
        request.start { httpResponse, result in
            switch result {
            case .success(let response): do {
                print("Graph Request Succeeded: \(response)")
                let dicval = response.dictionaryValue
                let email = dicval?.keys
                print("Graph Request Succeeded: \(String(describing: email))")
                }
            case .failed(let error):
                print("Graph Request Failed: \(error)")
            }

        }
    }
}

关于ios - Swift - 从 facebook 登录中获取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50558802/

相关文章:

facebook - Facebook Graph API 是否有版本控制方案?

javascript - 在 noSQL 设置中,搜索子节点的有效方法是什么?

javascript - Firebase "once"事件不返回 promise

javascript - 如何在react(firebase)中为runTransaction创建新的文档引用?

facebook - Facebook(网站)和图形 API 之间的点赞数不同。有什么东西或某人消失了?

ios - 谷歌地图 ios : Mapview Route vertical polyline always points to north or top of location arrow

ios - CoreData - 对许多关系

ios - iOS9 MFMailComposeViewController 的 NavigationBar 中的自定义字体?

ios - 无法将 NSAttributedString.DocumentAttributeKey 类型的值转换为 .DocumentReadingOptionKey

asp.net - 异步加载 Facebook Javascript SDK