iOS:如何在login后authentication用户(用于自动login)?

我想使用自动loginfunction。 所以,当用户打开应用程序,他被授予“login屏幕”。 当他login成功时,他应该被引导到他的帐户。 我称之为“账户屏幕”。 现在,当用户重新启动应用程序,他应该直接进入他的帐户,而不会看到“login屏幕”。

loginfunction已经在我的项目中正常工作(用户名和密码保存在UserDefault),但每次closures应用程序,我必须再次login。 所以我的问题是:如何自动login用户? 或者更好地说:如何检查数据(保存在UserDefault中)是否与数据库(MYSQL)中的数据相同?

  1. 用户第一次login时,将用户凭证保存在iPhone的钥匙串中。
  2. 当应用程序再次打开时,您检查钥匙串中是否存在用户凭证,如果是,则您的代码应该调用login逻辑并进行自动login,然后在login画面后进入屏幕。 如果不是,那么你应该显示login屏幕。 您可以在AppDelegates applicationDidFinishLaunching中执行此逻辑。
  3. 每当用户点击注销button,首先从钥匙串中删除用户凭据,并返回到login控制器。

只需在用户login时将login凭证添加到钥匙串,并且只有在用户单击登出button后才能将其移除。 如果用户退出应用程序而不注销,那么凭证仍然在钥匙串中,当用户返回到应用程序时,您可以检索它们。

编辑:我想我必须添加一件事情..如果您的login逻辑需要时间(如您使用Web请求或东西login),将login逻辑代码放入您的loginViewController而不是ApplicationDelegate,并在自动login过程中使用任何活动指标处理。

编辑 :我编辑了整个答案,用钥匙串取代NSUserDefault。 这个线程解释了原因。

在保存用户名和密码的同时,强烈build议保存在Keychain而不是NSUserDefaults中。 请参阅这篇文章以获得更好的理解。

要回答这个问题:如果您想使用钥匙串数据自动login,请使用免费框架“SFHFKeychainUtils”。 它将用户名,密码和服务名称保存在钥匙串中。 如果你想检索它,只需将用户名保存在NSUserDefaults中,你就可以轻松地获得密码。

开始了:

SiFi HiFi框架: https //github.com/ldandersen/scifihifi-iphone/tree/master/security

SiFi Hifi框架(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来存储用户名和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; }