我目前正在使用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身份验证上创建帐户。
答案 0 :(得分:1)
使用Firebase进行身份验证时,Auth
对象返回isNewUser
至additionalUserInfo
。因此,您可以看到新用户或现有用户的状态。
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
}
}
}