【发布时间】:2020-10-02 20:23:00
【问题描述】:
用户使用 Google 登录后,我想将他们带到主屏幕;但是,代码并没有完全执行。
这是代码:
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!,
withError error: Error!) {
if let error = error {
if (error as NSError).code == GIDSignInErrorCode.hasNoAuthInKeychain.rawValue {
print("The user has not signed in before or they have since signed out.")
} else {
print("\(error.localizedDescription)")
}
return
}
let firstName = user.profile.givenName
let lastName = user.profile.familyName
let email = user.profile.email
//Firebase sign in
guard let authentication = user.authentication else {return}
let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)
Auth.auth().signIn(with: credential) { (authResult, error) in
if let error = error {
print("Firebase sign In error")
print(error)
return
} else {
let db = Firestore.firestore()
db.collection("users").addDocument(data: ["firstName": firstName!, "lastName": lastName!, "email": email!, "uid": authResult!.user.uid]) { (error) in
if error != nil {
print("Error: User data not saved")
}
}
print("User is signed in with Firebase")
let mainStoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homeViewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeVC") as! HomeViewController
self.window?.rootViewController = homeViewController
self.window?.makeKeyAndVisible()
}
}
}
更具体地说:
Auth.auth().signIn(with: credential) { (authResult, error) in
if let error = error {
print("Firebase sign In error")
print(error)
return
} else {
let db = Firestore.firestore()
db.collection("users").addDocument(data: ["firstName": firstName!, "lastName": lastName!, "email": email!, "uid": authResult!.user.uid]) { (error) in
if error != nil {
print("Error: User data not saved")
}
}
print("User is signed in with Firebase")
let mainStoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homeViewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeVC") as! HomeViewController
self.window?.rootViewController = homeViewController
self.window?.makeKeyAndVisible()
}
}
print("User is signed in with Firebase") 确实发生了,但它无法切换 HomeViewController,我不确定我在这里做错了什么。
【问题讨论】:
-
查看我的回答,但作为后续问题,`.signIn' 功能是登录现有用户。使用此代码流,每次现有用户登录时,都会在 users 集合中创建一个新文档 - 这是您想要的吗?
-
不,不是。正在努力。
标签: ios swift firebase firebase-authentication google-signin