Firebase – 删除并重新安装应用程序不会取消对用户的身份validation

用下面的代码validation用户后(下面是我的代码的修剪版本,所以只有成功的login逻辑显示)…

let firebaseReference = Firebase(url: "https://MY-FIREBASE.firebaseio.com") 

 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)") } }) } }) } 

(即启动并运行应用程序,成功login)。

如果您然后删除应用程序并重新安装它在同一个设备上,这个调用 – 我在应用程序委托使用,以确定用户是否login – 将始终返回,他们login。

 if firebaseReference.authData == nil { // Not logged in } else { // Logged in } 

这是为什么? 我会想到删除应用程序,重新安装它应该擦除所有的数据。

如果您在iOS模拟器中重置了“内容和设置”,并且安装了该应用程序,则firebaseReference.authData属性将再次nil

Firebase身份validation会话在iOS钥匙串中保留在用户的设备上。 应用程序卸载后,应用程序的钥匙串数据不会被删除。

如果您希望手动清除数据,则可以将一些其他元数据与应用程序一起存储,并手动调用FirebaseRef.unauth()来清除持久会话。 请参阅#4747404:卸载应用程序时删除钥匙串项目作为附加参考。

在AppDelegate的didFinishLaunchingWithOptions函数(返回true)之前添加下面的代码可以很快地工作。

 let userDefaults = NSUserDefaults.standardUserDefaults() if userDefaults.valueForKey("appFirstTimeOpend") == nil { //if app is first time opened then it will be nil userDefaults.setValue(true, forKey: "appFirstTimeOpend") // signOut from FIRAuth do { try FIRAuth.auth()?.signOut() }catch { } // go to beginning of app } else { //go to where you want }