【发布时间】:2017-07-12 17:26:41
【问题描述】:
我目前正在使用登录身份验证,以及在 firebase 注册。我现在想让我的用户保持登录状态,这是有效的。我面临的问题是当我注销时,我尝试重新登录并收到此错误: // 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'Receiver () has no segue with identifier 'chatRoom''\ 这没有任何意义,因为当我第一次登录时,它会将我带到使用 chatRoom segue 的 ChatRoom Viewcontroller。
下面是我的代码:
func handleLogin() {
guard let email = emailTextField.text, let password = passwordTextField.text
else {
print("Form is not valid")
return
}
Auth.auth().signIn(withEmail: email, password: password, completion: { (user, error) in
if error != nil {
print(error!.localizedDescription)
self.loginErrorAlert("Error!", message: "Username or password incorrect, please try again.")
return
}
// successfully logged in our user and keep user logged in until they logout
if Auth.auth().currentUser != nil {
UserDefaults.standard.set(Auth.auth().currentUser!.uid, forKey: "loggedIn")
UserDefaults.standard.synchronize()
self.performSegue(withIdentifier: "chatRoom", sender: self)// this is the error I am facing
}
})
}
func handleRegister() {
guard let email = emailTextField.text, let password = passwordTextField.text, let name = nameTextField.text else {
print("Form is not valid")
signupErrorAlert("Error!", message: "Could not be Registered at this time, please try again.")
return
}
Auth.auth().createUser(withEmail: email, password: password, completion: { (user: User?, error) in
if error != nil {
print(error!.localizedDescription)
self.loginErrorAlert("Error!", message: "Could not be Registered at this time, please try again later.")
return
}
guard let uid = user?.uid else {
return
}
// successfully authenticated user and keep logged in until they logout
let ref = Database.database().reference(fromURL: "https://boccighub.firebaseio.com/")
let usersReference = ref.child("users").child(uid)
let values = ["name": name, "email": email]
usersReference.updateChildValues(values, withCompletionBlock: { (err, ref) in
if err != nil {
print(err!.localizedDescription)
return
}
if Auth.auth().currentUser != nil {
UserDefaults.standard.set(Auth.auth().currentUser!.uid, forKey: "loggedIn")
UserDefaults.standard.synchronize()
self.performSegue(withIdentifier: "chatRoom", sender: self)
}
})
})
}
// User logged out
@IBAction func handleLogout(_ sender: Any) {
do {
try Auth.auth().signOut()
print("user signedout")
if Auth.auth().currentUser == nil {
print("No user, key removed")
UserDefaults.standard.removeObject(forKey: "loggedIn")
UserDefaults.standard.synchronize()
print("User logged out")
let loginController = LoginViewController()
present(loginController, animated: true, completion: nil)
}
} catch let logoutError {
print(logoutError)
}
}
【问题讨论】:
-
你的问题与你的标题无关
-
@J.Doe 这样更好吗?
-
您的错误与注销和 Firebase 无关。您的标题非常具有误导性。
-
该错误可能是有道理的,因为当您注销时,您执行的是
let loginController = LoginViewController(), then present(...),并且您没有调用故事板中带有segue的LoginViewController。好吧,它“可能有意义”,但缺少该代码是什么类等信息。 -
@Larme 好的,你想让我上传我的 loginViewController 吗?