如何检查Google / Facebook帐户是否已用于在Firebase Auth上创建帐户

时间:2020-01-25 08:17:28

标签: ios swift facebook firebase firebase-authentication

我目前正在使用Firebase身份验证进行应用程序的注册/登录。 我有用于Facebook注册/登录和Google注册/登录的自定义按钮。

例如,“ Facebook注册/登录”按钮的代码为

@objc private func performFacebookLogin(_ sender: UIButton) {
        let fbLoginManager : LoginManager = LoginManager()
        fbLoginManager.logIn(permissions: ["email"], from: self) { (result, error) -> Void in
            if let error = error {
                print(error)
            } else {
                if result == nil {
                    print("no result!")
                    return
                }
                if AccessToken.current == nil {
                    print("no token")
                    return
                }
                DispatchQueue.main.async {
                    ThirdPartySignupViewController.push(fromVC: self, method: .facebook)
                }
            }
        }
    }

如果用户尚未使用此Facebook帐户在应用程序中创建帐户,则会将用户带到另一个视图控制器,以向其帐户添加其他信息。

但是,我找不到任何方法来确定Facebook帐户以前是否已在应用程序中用作帐户,在这种情况下,我只想登录用户并将其带到主屏幕。有办法吗?

我尝试了signIn(with:)方法,希望如果应用程序中没有使用此Facebook帐户凭据的帐户,则该方法将返回错误,但这将不起作用,因为这最终会创建一个新的帐户,如果以前没有使用过Facebook帐户来创建帐户。

let credential = FacebookAuthProvider.credential(withAccessToken: AccessToken.current!.tokenString)
Auth.auth().signIn(with: credential) { (authResult, error) in
   //check if I get an error if the Facebook account has not been used             
}

(编辑)所需的流程是1.使用Facebook / Google登录→2.输入其他信息→3.在Firebase身份验证上创建帐户。

1 个答案:

答案 0 :(得分:1)

使用Firebase进行身份验证时,Auth对象返回isNewUseradditionalUserInfo。因此,您可以看到新用户或现有用户的状态。

let credential = FacebookAuthProvider.credential(withAccessToken: AccessToken.current!.tokenString)
    Auth.auth().signIn(with: credential) { (authResult, error) in
        //authResult?.additionalUserInfo?.isNewUser
        if let auth = authResult{
            if auth.additionalUserInfo?.isNewUser {
                // User has not been authenticated before. Do what you need
            } else {
                // User has been authenticated before
            }
        }
    }