Как сохранить имя и пароль в связке ключей в Swift - PullRequest
0 голосов
/ 20 марта 2019

Я использую UserDefaults для хранения и получения информации об имени и пароле, но теперь я хочу сохранить данные об имени и пароле в связке ключей в целях безопасности.Я прошел так много уроков, но я не понимаю.необходимо ли добавить какую-либо инфраструктуру git, или мы можем сохранить и получить имя и пароль вручную.если необходимо добавить git framework, пожалуйста, предложите мне лучший брелок в swift для хранения имени и пароля.

ниже мой код в UserDefaults:

в регистрации viewcontroller

UserDefaults.standard.set(regNameTextField.text, forKey: "name")
UserDefaults.standard.set(regPasswordTextField.text, forKey: "password")

в логине viewcontroller

let storedregName = UserDefaults.standard.value(forKey: "name") as! String
let storedregPassword = UserDefaults.standard.value(forKey: "password") as! String

Пожалуйста, помогите мне сохранить имя и пароль в цепочке для ключей.

1 Ответ

0 голосов
/ 20 марта 2019

Посмотрите на этот пример:

Определите структуру для хранения учетных данных при их перемещении по вашему приложению в памяти:

struct Credentials {
    var username: String
    var password: String
}

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

enum KeychainError: Error {
    case noPassword
    case unexpectedPasswordData
    case unhandledError(status: OSStatus)
}

Затем укажите сервер, с которым работает ваше приложение:

static let server = "www.example.com"

Создайте запрос Add, используя экземпляр структуры учетных данных иконстанту сервера, вы можете создать запрос на добавление:

let account = credentials.username
let password = credentials.password.data(using: String.Encoding.utf8)!
var query: [String: Any] = [kSecClass as String: kSecClassInternetPassword,
                            kSecAttrAccount as String: account,
                            kSecAttrServer as String: server,
                            kSecValueData as String: password]

Добавить элемент После завершения запроса вы просто передаете его в функцию SecItemAdd(_:_:):

let status = SecItemAdd(query as CFDictionary, nil)
guard status == errSecSuccess else { throw KeychainError.unhandledError(status: status) }

Источник

...