我有一个包含三个按钮的登录页面:logInOutlet, logOutOutlet, bookingsOutlet
。
如果用户已登录,则显示logOut和预订,并隐藏logIn。相反,如果用户退出,请隐藏:logOut按钮&预订按钮,显示:登录按钮。
根据当前用户的登录状态,我想显示/隐藏某些按钮。
FIRAuth.auth()?.currentUser?.uid == nil
,则用户未登录并执行某些操作。
事实证明我错了,因为FIRAuth.auth()?.currentUser?.uid
将始终返回有效的uid值,即使用户已注销。
“Firebase身份验证会话将保留在iOS钥匙串中的用户设备上。” - 我对keychain数据持久性知之甚少。我想知道在用户点击logOutOutlet
按钮之前是否有更好的方法可以使logIn会话保持活动状态。我必须提到用户可以从应用程序中的不同viewControllers登录。我在第1点解释的初始假设似乎是一个可行的选择,因为Firebase总能处理大部分工作。
@IBAction func logOut(sender: AnyObject) {
// if the current user is logged in, try to log out and
// hide: logOut button & bookings button
// show: logIn button
// if FIRAuth.auth()?.currentUser?.uid != nil {
do {
try FIRAuth.auth()?.signOut()
} catch let error as NSError {
print(error.localizedDescription)
print("the current user id is \(FIRAuth.auth()?.currentUser?.uid)")
}
self.logInOutlet.hidden = false
self.logOutOutlet.hidden = true
self.bookingsOutlet.hidden = true
// FullData.finalemailAddress = FIRAuth.auth()?.currentUser?.email
FullData.finalemailAddress = nil
} // end of if.. FIRAuth.auth()
}
override func viewDidLoad() {
super.viewDidLoad()
// if the user is logged out
// hide: logOut button & bookings button
// show: logIn button
// if FIRAuth.auth()?.currentUser?.uid == nil {
self.logInOutlet.hidden = false
self.logOutOutlet.hidden = true
self.bookingsOutlet.hidden = true
// if the user is logged in
// hide: logIn Button
// show: logOut button & bookings button
} else if
//FIRAuth.auth()?.currentUser?.uid != nil{
self.logInOutlet.hidden = true
self.logOutOutlet.hidden = false
self.bookingsOutlet.hidden = false
print("Great \(FullData.finalemailAddress)")
print("Super \(FIRAuth.auth()?.currentUser?.uid)")
}
}