ios - swift5 中更新和删除钥匙串(keychain)时出现问题

标签 ios swift keychain swift5

我在更新和删除钥匙串(keychain)时遇到问题。

public func clearKeychain(username: String) throws -> Any?{
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: username
    ]
    let status = SecItemDelete(query as CFDictionary)

    if status != errSecSuccess {
        throw KeychainError.unhandledError(status: status)
    }
    print("Clear Keychain")
    return status
}

public func updateKeychain(username: String, password: String) throws -> Any?{
    let credentials = Credentials.init(username: username, password: password)
    let data = credentials.password.data(using: .utf8)!

    // store password as data and if you want to store username
    let query: [String: Any] = [kSecClass as String:  kSecClassGenericPassword,
                                kSecAttrAccount as String: username,
                                kSecValueData as String: data]
    let fields: [String: Any] = [
        kSecAttrAccount as String: username,
        kSecValueData as String: data
    ]
    let status = SecItemUpdate(query as CFDictionary, fields as CFDictionary)
    guard status == errSecSuccess else {
        throw KeychainError.unhandledError(status: status) }
    print("Updated Password")
    return status
}

用法:

let _ = (try? keychain.clearKeychain(username: "KeychainUser")) as Any?
let _ = (try? keychain.updateKeychain(username: "KeychainUser", password: "123456789")) as Any?

无法删除或更新钥匙串(keychain)。我在创建和获取钥匙串(keychain)的值时没有问题,但在更新或删除时遇到问题。没有显示错误。并且状态返回 nil。

最佳答案

要更新和删除您的项目,您需要搜索特定类型的数据。所以你不需要在查询中传递数据。只需按如下方式更新您的查询即可解决更新数据的问题。

let query: [String: Any] = [kSecClass as String:  kSecClassGenericPassword]

By default, keychain services deletes all keychain items that match the search parameters. If you want to delete a specific item that you already have a reference or persistent reference to, add that to the search dictionary as the value for the kSecMatchItemList key. In this way, you limit the deletion to only the specified item.

关于ios - swift5 中更新和删除钥匙串(keychain)时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57814414/

相关文章:

ios - 如何更改状态栏的背景颜色?

swift - 仅向登录用户发送 Firebase 推送通知

swift - Collection View 中的搜索功能

ios - 在 Swift 3.0 (Alamofire 4.4.0) 中发出一些请求后,Alamofire 停止工作

ios - 找不到代码签名身份 : setting up jenkins

macos - 在钥匙串(keychain)中生成 CSR,未创建私钥 osx

iOS:如何减少驾驶跟踪应用程序中的后台事件

ios - 图像缩放比例未重置

ios5 - iOS在钥匙串(keychain)中保存多个密码

objective-c - 我应该在哪里以及如何实例化一个将在 IOS 应用程序中全局使用的对象?