2016-11-11 4 views
0

У меня есть класс REST APIManager - singleton для работы с сервером api. Существует метод входа, который возвращает пользовательский объект токена;IOS. Где хранить данные пользователя после авторизации?

Все другие методы API используют маркер для выполнения запросов. Где я должен хранить этот токен после входа? И как использовать этот токен в других методах API?

Конечно, я могу хранить маркер в NSUserDefaults и реализовать методы в APIManager так:

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

Но я думаю, что его хорошая идея, чтобы абстрагироваться от TokenEntity аргумента в методах. Как это сделать?

ответ

2

Хранение конфиденциальной информации в NSUserDefaults не рекомендуется. Вы должны использовать Keychain services, вместо:

Сделав один вызов к этому API, приложение может хранить небольшие кусочки секретной информации на связку ключей, из которых приложение может впоследствии получить информацию, и с помощью одного вызова , Брелок привязывает данные, зашифровывая его перед сохранением в файловой системе, освобождая вас от необходимости внедрять сложные алгоритмы шифрования.

Теперь IOS брелок обеспечивает довольно низкоуровневое API, так что, как правило, лучше использовать более высокого уровня обертки, такие как те, которые предусмотрены Locksmith или keychain-swift.

Например, при использовании последнего, хранения и чтения с брелка так просто, как делать (после необходимой настройки):

Если вы предпочитаете, вы можете пойти прямой путь и использовать образец, предоставленную Apple по вышеуказанной ссылке.

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

EDIT:

В структуре кода, вы можете создать класс для инкапсуляции маркер и любую другую информацию, необходимую для каждого запроса. Этот класс имел бы, например, метод init, принимающий токен; и метод, называемый createNews со следующей упрощенной подписью:

func createNews(news:NewsEntity) { 
    ... 

В зависимости от ваших предпочтений стиля, это может быть синглтон читать ваш маркер с брелка (или NSUserDefaults, хотя это не было бы желательно).

+0

Почему пользовательский по умолчанию не рекомендуется, брелок сохраняет вещь навсегда, пока ОС не будет очищена. Но обычно мы используем для хранения по умолчанию пользователя, поскольку это будет удалено, когда приложение будет удалено с устройства. Не могли бы вы объяснить? – Janmenjaya

+0

Спасибо за ответ. Вопрос не в безопасности, а в основном о организации кода, я спросил: как избежать аргумента токена во всех методах API, требуется этот токен. Я использую rxAlamofire, Alamofire. –

+1

@Janmenjaya: в основном вы хотите хранить конфиденциальную информацию с использованием более сильного шифрования. все, что нечувствительно, отлично с nsuserdefaults. скажем, если вы подключите свое устройство к Mac, вы можете легко прочитать nsuserdefault приложения - это довольно хромая безопасность. – sergio

Смежные вопросы