2012-09-10 156 views
1

我正在实现一个应用程序,第一个视图是登录视图。它包含3个文本字段帐户名称,用户名和密码。我想让应用程序保存登录信息,以便在用户每次打开应用程序时不让用户编写它们。并且在他/她退出时被删除。保存登录凭证Xcode

该怎么办?以及如何读取/写入文件?

谢天谢地你的

+4

请不要在NSUserDefaults中存储敏感数据。使用KeychainService或在将数据存储在NSUserDefault中后首先加密数据。 – Iducool

+0

@fadddd我不建议将敏感数据存储到'NSUserDefaults'中,KeychainItemWrapper是您可以拥有的最佳选择。祝你好运。 – viral

回答

-7
To Save: 

    [[NSUserDefaults standardUserDefaults] setValue:AccountTxtField.text forKey:@"Account"]; 
    [[NSUserDefaults standardUserDefaults] setValue:UserTxtField.text forKey:@"Username"]; 
    [[NSUserDefaults standardUserDefaults] setValue:passwordTxtField.text forKey:@"password"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

To Read: 

    NSString * _Account = [[NSUserDefaults standardUserDefaults] stringForKey:@"Account"]; 
    NSString * _UserName = [[NSUserDefaults standardUserDefaults] stringForKey:@"Username"]; 
    NSString * _password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password"]; 

logOut:set all value is null。

+14

不好的建议。不要使用用户默认值来存储敏感数据。正如其他人已经回答的那样,使用钥匙串API。 –

+0

@JensKilian请阅读并复习问题,然后评论 –

+0

我知道它根本没有安全感,但它是最简单和最快速的。而我的数据并不安全。 感谢所有的建议:) – fadd

2

这类敏感数据通常存储在钥匙串中。类似的问题here

2

检查keychainServConcepts保存所需的数据

检查STUtils用于保存用户名和密码安全。

U也可以使用NSUserDefault以key的形式保存数据作为userName,并在需要时删除。

26

使用钥匙链来存储登录密码。下面是简单的代码

要存储:

KeychainItemWrapper *keychain = 
[[KeychainItemWrapper alloc] initWithIdentifier:@"MyAppLoginData" accessGroup:nil]; 
[keychain setObject:loginStr forKey:(id)kSecAttrAccount]; 
[keychain setObject:pwdStr forKey:(id)kSecValueData]; 

要查询:

NSString *login = [keychain objectForKey:(id)kSecAttrAccount]; 
NSString *pwd = [keychain objectForKey:(id)kSecValueData]; 

删除:

[keychain resetKeychainItem]; 

您需要添加KeychainItemWrapper.h和KeychainItemWrapper.m (here)首先在您的项目中。

使用钥匙串来存储数据的另一个重要方面是

  1. 的数据即使在应用程序卸载安装
  2. 的数据可以在您的应用程序共享(需要有同捆种子ID执着,读自 here)。考虑所有应用程序的单点登录。
  3. 仅在从设置重置设备时删除数据。
+0

那么删除它怎么样? – Elgert

+0

查看最新的答案 – msk

+2

有史以来最好回答:) – Supertecnoboff