我想使用自动登录功能。 因此,当用户打开应用程序,他被授予了“登录屏幕”。 当他登录成功,他应该被引导到他的账户。 我把这称为“帐户屏幕”。 现在,当用户重新启动应用程序,他应该直接得到针对他的帐户,没有看到“登录屏幕”。
登录功能已经工作在我的项目(用户名和密码保存在UserDefault)的罚款,但我每次关闭应用程序的时候,我需要再次登录。 所以我的问题是:如何自动登录用户? 或者更好的说:我如何检查数据(保存在UserDefault)是一样的,在数据库(MySQL的)?
我想使用自动登录功能。 因此,当用户打开应用程序,他被授予了“登录屏幕”。 当他登录成功,他应该被引导到他的账户。 我把这称为“帐户屏幕”。 现在,当用户重新启动应用程序,他应该直接得到针对他的帐户,没有看到“登录屏幕”。
登录功能已经工作在我的项目(用户名和密码保存在UserDefault)的罚款,但我每次关闭应用程序的时候,我需要再次登录。 所以我的问题是:如何自动登录用户? 或者更好的说:我如何检查数据(保存在UserDefault)是一样的,在数据库(MySQL的)?
只要你添加的登录凭据,以在用户登录时在钥匙串中只有一次用户点击退出按钮将其删除。 如果用户退出应用程序,而不注销,则凭证仍然会在钥匙串,当用户返回到应用程序,你可以检索它们。
编辑:我想我一定多加一个thing..If登录逻辑需要一定的时间(如你登录使用web请求或东西),把登录逻辑代码在你登录的ViewController而不是ApplicationDelegate,并自动登录过程中使用的任何活动指示灯处理。
编辑 :我编辑了完整的答案,钥匙扣取代NSUserDefault。 此线程解释了为什么。
同时节省用户名和密码,强烈建议在钥匙串中保存,而不是NSUserDefaults的。 请参阅此职位为更好的理解。
要回答的问题是:如果你想自动登录与钥匙串数据,使用免费的框架“SFHFKeychainUtils”。 它节省了用户名,密码和服务名在钥匙串。 如果你想找回它,只是在保存NSUserDefaults的用户名,你可以得到轻松的密码。
开始了:
高保真框架SIFI: 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
我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;
}