2011-05-07 95 views
0

我在许多应用程序中看到,您只需登录一次应用程序,然后在下次打开应用程序时,不需要再次输入用户名和密码。我怎样才能在SFHFKeychainUtils的帮助下做到这一点?帮助iphone会话登录

回答

1

你几乎已经回答了你的问题。您可以使用SFHFKeychainUtils包装器将凭证存储在应用程序的钥匙串中。当应用程序加载时,它会检查是否有密码。如果没有,请提示用户登录并相应地存储用户名&。

// Application Loads... 

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; 
NSString *username = [standardDefaults stringForKey:@"kApplicationUserNameKey"]; 

if (username) { 
    NSError *error = nil; 
    NSString *password = [SFHFKeychainUtils getPasswordForUsername:username andServiceName:@"com.company.app" error:&error]; 

    // Check password... 
} else { 
    // No username. Prompt the user to enter username & password and store it 
    username = @"userEnteredUsername"; 
    NSString *password = @"userEnteredPassword"; 

    [standardDefaults setString:username forKey:@"kApplicationUserName"]; 
    NSError *error = nil; 
    BOOL storeResult = [SFHFKeychainUtils storeUsername:username andPassword:password forServiceName:@"com.company.app" updateExisting:YES error:&error]; 
} 

这显然是不完整的,没有以适当的方式组织,但你应该能够理解基本流程。

+0

的问题是,SFHF的需求,以用户名来检查密码是否存在与该用户名.. 。所以我怎样解决这个问题 – adit 2011-05-07 05:42:14

+0

你可以使用一个固定的用户名。 另外,为了将来的参考,请说清楚你到底有什么问题。在您的原始文章中,您引用了用户名/密码方案。 – 2011-05-07 05:45:26

+0

是的,实际上它是正确的..在登录页面中,我们总是看到一个用户名和密码...所以在这种情况下,您建议硬编码用户名? – adit 2011-05-07 05:49:35

0

您可以为此使用NSUserDefaults。

[[NSUserDefaults standardUserDefaults] setObject:username forKey:@"username"]; 
[[NSUserDefaults standardUserDefaults] setObject:password forKey:@"password"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

下一次用户打开您的应用程序,你可以简单地得到这个信息:

NSString *username = [[NSUserDefaults standardUserDefaults] stringForKey:@"username"]; 
NSString *password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password"]; 
+1

不应将证书存储在'NSUserDefaults';他们应该存储在安全的位置,如钥匙链。 – 2011-05-07 05:52:52

+0

很高兴知道,刚刚发现一篇文章说用户默认存储在plist文件中的开放文本,在您执行备份时会同步。谢谢迪伦。 – romaonthego 2011-05-07 06:15:45