【问题标题】:How to save Name and Password details in Keychain in swift如何快速将名称和密码详细信息保存在钥匙串中
【发布时间】:2019-08-11 12:46:06
【问题描述】:

我正在使用 UserDefaults 来存储和检索名称和密码详细信息,但现在出于安全目的,我想将名称和密码详细信息存储在钥匙串中。我经历了很多教程,但我不明白。是否有必要添加任何 git 框架,或者我们可以手动保存和检索名称和密码详细信息。如果需要添加 git 框架,请建议我使用 swift 中最好的钥匙串框架来存储名称和密码。

下面是我在 UserDefaults 中的代码:

在注册视图控制器中

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

在登录视图控制器中

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

任何人都可以在这里指导我。

【问题讨论】:

标签: ios swift3 keychain


【解决方案1】:

看看这个例子:

定义一个结构来保存凭据,因为它们在内存中移动您的应用程序:

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"

创建添加查询 使用凭证结构的实例和服务器常量,您可以创建添加查询:

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) }

Source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2014-05-27
    • 1970-01-01
    • 2017-07-29
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多