嗨,我试图使Firebase Facebook身份验证 .
但是有一些问题 . 我可以通过Firebase获得Facebook电子邮件,但如果我在登录成功后更改了视图,我就无法获得Facebook电子邮件
Auth.auth().currentUser?.email
我可以在Firebase身份验证控制台上查看我的Facebook电子邮件 .
谷歌和正常的电子邮件身份验证有效,但Facebook不是 .
这是我的代码
class ViewController: UIViewController, GIDSignInUIDelegate, FBSDKLoginButtonDelegate{
// facebook Login
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult?, error: Error!) {
if result?.token == nil {return}
let credential = FacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
Auth.auth().signIn(with: credential) { (user, error) in
if let error = error {
print(error)
return
}
}
FBSDKLoginManager().logOut()
}
// facebook logout
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
}
@IBOutlet weak var email: UITextField!
@IBOutlet weak var password: UITextField!
@IBOutlet weak var facebookLogin: FBSDKLoginButton!
override func viewDidLoad() {
super.viewDidLoad()
GIDSignIn.sharedInstance().uiDelegate = self
facebookLogin.delegate = self
facebookLogin.readPermissions = ["email"]
Auth.auth().addStateDidChangeListener { (user, error) in
if user != nil {
self.performSegue(withIdentifier: "home", sender: nil)
}
}
}
@IBAction func googleSignBtn(_ sender: Any) {
GIDSignIn.sharedInstance().signIn()
}
@IBAction func emailLogin(_ sender: Any) {
Auth.auth().createUser(withEmail: self.email.text!, password: self.password.text!) { (user, error) in
if error != nil {
Auth.auth().signIn(withEmail: self.email.text!, password: self.password.text!, completion: { (user, error) in
})
}else{
let alert = UIAlertController(title: "Alert", message: "Sign up Success!", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Confirm", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
}
}
1 回答
有时,Firebase Auth不会返回这些细节 . 将所有详细信息存储在Firebase数据库中是一种很好的做法,如下图所示
Database.database().reference().child("uid")
User profile Structure