在使用以下代码验证用户之后(以下是我的代码的修剪版本,因此只显示成功的登录逻辑)…
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)") } }) } }) }
(即,启动并运行应用程序,成功登录).
如果您随后删除该应用程序并将其重新安装在同一台设备上,则该调用(我在应用程序委托中使用的是否确定用户是否已登录)将始终返回他们登录.
if firebaseReference.authData == nil { // Not logged in } else { // Logged in }
这是为什么?我会想,删除应用程序并重新安装应该擦除所有数据.
如果您重置iOS模拟器中的内容和设置,并安装该应用程序,firebaseReference.authData属性将再次为零.
解决方法
Firebase认证会话在iOS钥匙串中的用户设备上保留.卸载应用程序时,应用程序的钥匙串数据不会被删除.
如果您要手动清除数据,您可以随应用程序一起存储一些额外的元数据,并手动调用FirebaseRef.unauth()来清除持久化的会话.请参阅#4747404: Delete keychain items when an app is uninstalled以获得其他参考.