【问题标题】:store username/password within an iphoneapp using keychain使用钥匙串在 iphoneapp 中存储用户名/密码
【发布时间】:2013-09-09 15:56:21
【问题描述】:

我有一个注册表单,其中有很多字段,我将所有字段的数据以 json 数据的形式保存在新用户输入的服务器上。 在所有这些字段中,我有两个字段用户名和密码。我想将它们存储在钥匙串中 我为此使用以下代码:

[[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];

[keychainItem setObject:@"passtextfield.text" forKey:kSecValueData];
[keychainItem setObject:@"usernametextfield.text" forKey:kSecAttrAccount];

因此,每当新用户提交注册表单时,用户名和密码将分别与密钥一起保存在钥匙串中。

现在我的问题是 - 我有另一个登录页面,当我必须以用户身份启动应用程序时,我必须先使用我在注册时作为用户输入的用户名和密码登录。

现在告诉我如何登录和检索钥匙串数据的代码。 我是否应该对上面使用的 (accessGroup:nil) 进行任何更改。 提前致谢

【问题讨论】:

    标签: ios6


    【解决方案1】:

    访问组不是服务器端,它是 iPhone 端。来自文档:

    访问组可用于在两个或多个应用程序之间共享钥匙串项。对于共享钥匙串项的应用程序,应用程序必须在其钥匙串访问组权利中列出一个公共访问组,并且将共享项添加到钥匙串的应用程序必须指定此共享访问组名称作为此密钥的值在传递给 SecItemAdd 函数的字典中。

    如果您有两个登录页面,您的应用逻辑将需要存储两个用户/密码组合。因此,您需要将 kSecAttrAccount 指向当前活动的帐户。

    -- 编辑

    根据您的评论,我了解到您想要 Safari 中的密码记住功能之类的功能?

    所以你有 Username1/password1 和 username2/password2。用户名“x”是您的kSecAttrAccount

    当用户输入用户名时,使用textFieldDidEndEditing:。在textFieldDidEndEditing 中扫描输入的字符串以查找username1username2 上的匹配项。如果有任何匹配,则检索相应的密码。如果没有匹配,则假定它是一个新的用户名/密码组合并存储这个新的。

    如果您想在他们键入时花哨并扫描匹配,然后阅读textField:shouldChangeCharactersInRange:replacementString:

    【讨论】:

    • "我只有一个登录页面。用户名/密码是通过注册页面存储的,这与登录页面不同。但是现在当我在登录页面输入用户名和密码时(请注意我已经在某个时间或几天前完成了注册)我想从钥匙串中检查它们是否存在。告诉我怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多