2015-01-11 2 views
17

После аутентификации пользователя с помощью следующего кода (ниже это обрезанная версия моего кода, так что только успешная логика Логина показана) ...Firebase - Удаление и повторная установка приложения не не-аутентификации пользователя

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 снова будет nil.

+0

Я думаю, что сессия может храниться в файле cookie Safari. Можете ли вы стереть куки-файлы Safari, чтобы убедиться, что это правда. Конечно, это все равно не решит вашу проблему, но, по крайней мере, поможет определить причину. –

ответ

28

Аутентификационный сеанс Firebase сохраняется на устройстве пользователя в цепочке ключей iOS. Данные связки ключей для приложения: не удаляется, когда приложение удаляется.

Если вы хотите вручную очистить данные, вы можете сохранить некоторые дополнительные метаданные вместе с приложением и вручную вызвать FirebaseRef.unauth(), чтобы очистить сохраненный сеанс. См. #4747404: Delete keychain items when an app is uninstalled для дополнительной справки.

+0

Отлично! Это очищает все. Быстрое использование NSUserDefaults сделает трюк. Спасибо. –

+1

Спасибо, Роб. Просто добавьте пункт, как и FirebaseAuth 3.1.1, теперь вам нужно будет вызвать 'try! FIRAuth.auth() !. SignOut() ' –

14

Добавление ниже кода в конце функции didFinishLaunchingWithOptions (до возврата true) AppDelegate работает быстро.

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 
} 
Смежные вопросы