2017-07-29 84 views
0

我是軟件新手,我有一個問題。登錄後保存userDefault標記

我有LoginPage叫做LoginVC(截圖如下)。當用戶第一次打開應用程序時,如果用戶使用他的用戶名和密碼登錄或通過Facebook帳戶登錄,下次打開應用程序時,他將通過登錄屏幕並直接顯示「NewsVC」。如果他退出登錄,他會再次看到登錄頁面。

根據我的調查,我必須使用UserDefault方法並創建一個本地數據庫(例如SQLite)。可能它會爲輸入的用戶創建一個訪問令牌。但我不知道我會怎麼做。也許在這個網站有關於這個問題的問題,但是因爲我不知道詳細的方式找不到這個話題。

你能解釋一下這個話題,並用一個簡單的Swift 3代碼來分享一個例子。

在此先感謝 LoginVC ScreenShot

回答

0

假設你想知道如何實現這點,你可以存儲和獲取價值象下面這樣: -

let default = UserDefaults.standard 
default.set(accessToken, forKey: "accessToken") 
default.synchronized() 
//Now get like this and use guard so that it will prevent your crash if value is nil. 
guard let accessTokenValue = default.string(forKey: "accessToken") else {return} 
print(accessTokenValue) 
+0

非常感謝您的回答。這個代碼是否足夠我所需要的? –

+0

如果您只想保存並從UserDefaults中獲取值,那麼是。 –

1

嘗試以下助手方法

設置用戶ID

func setCurrentLoginID(_ struserid: String) { 
     UserDefaults.standard.set(struserid, forKey:"userID") 
    } 

檢查用戶登錄或不

func isUserLoggedIN() -> Bool { 
    let str = UserDefaults.standard.object(forKey: "userID") as! String 
    return str.characters.count > 0 ? true : false 
} 

獲得用戶ID

func loggedUserId() -> String { 
     let str = UserDefaults.standard.object(forKey: "userID") as? String 
     return str == nil ? "" : str! 
    } 

對於註銷

func logout() { 
     UserDefaults.standard.set(nil, forKey: "userID") 
    } 
1

Securitywise,它被認爲是不好的做法,存儲登錄t okens在UserDefaults,我建議使用Keychain API。 「黑客」可以相對容易地從UserDefaults中讀取數據並使用您的訪問令牌。

鑰匙扣API是一個有點難以用,我建議您嘗試使用第三方庫,這裏是一個例子: https://github.com/jrendel/SwiftKeychainWrapper

更多有關保護iOS上的數據信息: https://github.com/felixgr/secure-ios-app-dev

如果您只是在學習 - 可以使用UserDefaults,但是一旦您考慮將您的應用移至生產環境 - 將其重構爲Keychain。