使用以下代码对用户进行身份验证后(下面是我的代码的修剪版本,因此只显示成功的登录逻辑)...
let firebaseReference = Firebase(url: "https://MY-FIREBASE.firebaseio.com")
Run Code Online (Sandbox Code Playgroud)
FBSession.openActiveSessionWithReadPermissions(["public_profile", "user_friends"], allowLoginUI: true,
completionHandler: { session, state, error in
if state == FBSessionState.Open {
let accessToken = session.accessTokenData.accessToken
firebaseReference.authWithOAuthProvider("facebook", token: accessToken,
withCompletionBlock: { error, authData in
if error != nil {
// Login failed.
} else {
// Logged in!
println("Logged in! \(authData)")
}
})
}
})
}
Run Code Online (Sandbox Code Playgroud)
(即启动并运行应用程序,成功登录).
如果您随后删除了应用程序并在同一设备上重新安装,则此调用(我在应用程序委托中使用以确定用户是否已登录)将始终返回他们已登录的状态.
if firebaseReference.authData == nil {
// Not logged in
} else {
// Logged in
}
Run Code Online (Sandbox Code Playgroud)
这是为什么?我本来以为删除应用程序并重新安装它应该擦除所有数据.
如果您重置iOS模拟器中的内容和设置,并安装该应用程序,该firebaseReference.authData属性将再次nil.
我正在使用Firebase构建一个应用程序,该应用程序使用一个初始文件SignInViewController加载登录页面,供用户通过电子邮件进行身份验证,从而触发以下方法:
@IBAction func didTapSignIn(sender: AnyObject) {
let email = emailField.text
let password = passwordField.text
FIRAuth.auth()?.signInWithEmail(email!, password: password!) { (user, error) in
if let error = error {
print(error.localizedDescription)
return
}
self.signedIn(user!)
}
}
func signedIn(user: FIRUser?) {
AppState.sharedInstance.displayName = user?.displayName ?? user?.email
AppState.sharedInstance.signedIn = true
NSNotificationCenter.defaultCenter().postNotificationName(Constants.NotificationKeys.SignedIn, object: nil, userInfo: nil)
performSegueWithIdentifier(Constants.Segues.SignInToHome, sender: nil)
}
Run Code Online (Sandbox Code Playgroud)
该SignInViewController还检查是否有缓存的当前用户,当应用程序启动,如果是这样,迹象表明,用户在:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(true)
//Synchronously gets the cached current user, or null if there is none.
if let user …Run Code Online (Sandbox Code Playgroud) 之前会问这个问题: Firebase注销无法在Swift中正常工作 使用Firebase 3注销用户,Swift仍然显示`currentUser'Firebase -iOS Swift:FIRAuth.auth()。signOut()未注销当前用户
但是,所有答案都不适用于我。我有VC 1,用户可以在其中登录,并且在viewdidappear中,我有打印该用户的打印文件。在VC 2中,我有一个按钮,应该注销用户并返回VC1。VC2中的代码2:
@IBAction func logOut(_ sender: UIButton) {
if FIRAuth.auth()?.currentUser != nil {
do {
try! FIRAuth.auth()!.signOut()
} catch let error as NSError {
print(error.localizedDescription)
}
}
FBSDKAccessToken.setCurrent(nil)
loggedIn = false
storedValuesData.setValue(nil, forKey: "savedLoginEmail")
storedValuesData.setValue(nil, forKey: "savedLoginPassword")
jumpToVC1()
}
Run Code Online (Sandbox Code Playgroud)
当我回到VC 1时,当用户按下注销按钮时,打印将再次打印用户的UID。但是该用户应注销,因此打印应为零。当我确定用户已注销时,如何确保仅显示VC 1?我以为完成块会很好,但是我不确定在这里如何工作...