我想使用自动登录功能。因此,当用户打开应用程序时,他将被委派给“登录屏幕”。当他成功登录时,他应该被引导到他的帐户。我称之为“帐户屏幕”。现在,当用户重新启动应用程序时,他应该直接转到他的帐户,而不会看到“登录屏幕”。
登录功能在我的项目中已经正常工作(用户名和密码保存在UserDefault中),但每次关闭应用程序时,我都必须再次登录。所以我的问题是:如何自动登录用户?或者更好地说:我如何检查数据(保存在UserDefault中)是否与数据库中的数据(MYSQL)相同?
答案 0 :(得分:23)
只需在用户登录时将登录凭据添加到钥匙串,并在用户单击退出按钮后将其删除。如果用户在没有注销的情况下退出应用程序,则凭据仍将保留在钥匙串中,您可以在用户返回应用程序时检索它们。
编辑:我想我必须再添加一件事......如果您的登录逻辑需要时间(就像您使用Web请求或其他东西登录),请将登录逻辑代码放入Login ViewController而不是ApplicationDelegate,并在自动登录过程中使用任何活动指示器。
编辑:我编辑了整个答案,用钥匙串取代了NSUserDefault。 This主题解释了原因。
答案 1 :(得分:2)
在保存用户名和密码时,强烈建议保存在Keychain而不是NSUserDefaults中。请参阅此post以获得更好的理解。
答案 2 :(得分:0)
要回答这个问题:如果您想使用钥匙串数据自动登录,请使用免费框架“SFHFKeychainUtils”。它在keychain中保存用户名,密码和服务名称。如果你想要检索它,只需在NSUserDefaults中保存用户名,你就可以轻松获得密码。
我们走了:
SiFi HiFi框架: https://github.com/ldandersen/scifihifi-iphone/tree/master/security
SiFi高保真框架(ARC兼容): https://stackoverflow.com/a/10348964/1011125
如何使用SFHFKeychainUtils: http://gorgando.com/blog/technology/iphone_development/simple-iphone-tutorial-password-management-using-the-keychain-by-using-sfhfkeychainutils
答案 3 :(得分:0)
我使用了NSUserDefaults和SSKeychain的组合。我使用NSUserDefaults存储用户名nad SSKeychain来存储密码。
这是我用来保存凭据的代码
NSString *user = self.username.text;
NSString *password = self.pass.text;
[SSKeychain setPassword:password forService:@"achat" account:user];
NSUserDefaults *dUser = [NSUserDefaults standardUserDefaults];
[dUser setObject:user forKey:@"user"];
[dUser synchronize];
这是我用来检索凭据的代码
NSUserDefaults *eUser = [NSUserDefaults standardUserDefaults];
NSString *savedUser = [eUser objectForKey:@"user"];
if (!savedUser) {
UIAlertView *uhoh = [[UIAlertView alloc] initWithTitle:@"Oops!" message:@"Please enter your username and password." delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil];
[uhoh show];
}
else {
NSString *savedPass = [SSKeychain passwordForService:@"achat" account:savedUser];
self.username.text = savedUser;
self.pass.text = savedPass;
}