2016-11-11 81 views
0

我有REST APIManager類 - 與服務器api一起工作的單例。 有返回用戶Token實體的登錄方法;IOS。授權後在哪裏存儲用戶數據?

所有其他API方法使用令牌發出請求。 登錄後應在哪裏存儲該令牌實體? 以及如何在其他API方法中使用該令牌?

當然,我可以在令牌NSUserDefaults的存儲和執行APIManager方法是這樣的:

func createNews(news:NewsEntity, token:TokenEntity){ 
... 
} 

但我認爲它好主意,從方法TokenEntity論證抽象。怎麼做?

回答

2

不建議將敏感信息存儲在NSUserDefaults中。您應該使用Keychain services,而不是:

通過使一個調用這個API,應用程序可以祕密少量信息存儲在鑰匙扣上,從該應用程序可以在以後通過一個調用檢索信息,也。鑰匙串在將數據存儲到文件系統之前通過對其進行加密來保護數據,從而使您無需實施複雜的加密算法。

現在,iOS的鑰匙扣提供了相當低的級別的API,所以它通常是最好使用一個更高級別的包裝,例如通過Locksmith,或keychain-swift提供的那些。

例如,使用後者,存儲和從鑰匙扣讀書是因爲這樣做(所需的設置後)一樣簡單:

如果你願意,你可以去直接的方式,並使用所提供的樣本蘋果在上述鏈接。

let keychain = KeychainSwift() 
keychain.set("hello world", forKey: "my key") 
keychain.get("my key") 

編輯:

至於代碼結構,你可以創建一個類來封裝令牌,並與每個請求所需要的任何其他信息。這個類將有,例如,一個init方法獲取令牌;和一種稱爲createNews有以下簡化簽名:

func createNews(news:NewsEntity) { 
    ... 

根據您的風格偏好,這可能是單從鑰匙串讀你的令牌(或NSUserDefaults的,儘管這是不可取的)。

+0

爲什麼不建議使用用戶默認值,鑰匙串將事物永久保存,直到操作系統清理完畢。但通常我們使用存儲在用戶的默認值,因爲將從應用程序中刪除應用程序時將被刪除。你能解釋一下嗎? – Janmenjaya

+0

感謝您的回覆,問題不是關於安全性,而是關於代碼組織,我問:如何避免所有API方法中的標記參數都需要該標記。我使用rxAlamofire,Alamofire。 –

+1

@Janmenjaya:基本上,你想使用更強大的加密存儲敏感信息。任何不敏感的都可以用nsuserdefaults。比如說,如果將設備連接到Mac,則可以輕鬆讀取應用程序的nsuserdefaults - 這非常不安全。 – sergio