0

我现在只在 iOS 应用程序上工作了几个星期,所以请耐心等待。我希望我的应用程序的第一个屏幕是使用电子邮件地址和密码登录。我设置了视图,但是我不确定存储身份验证的最佳方式是什么。

身份验证本身将在服务器端处理。当用户输入他们的电子邮件和密码时,它将运行连接到我的服务器并在失败与否时返回 JSON。如果成功,我会返回我需要的任何东西。

问题是,我应该存储哪些信息以及存储在哪里?我应该将他们的用户 ID 和密码存储为 md5 字符串吗?然后每次我调用服务器时,我都可以传递他们的用户 ID 和 md5 字符串来验证他们是否有访问权限。这样做有意义吗?

4

1 回答 1

2

是的,您应该将凭据存储在设备上。这样,当服务器上的会话过期时,可以立即重新验证用户。(请记住,这比每次都强制用户登录更不安全,因为如果用户丢失了他的手机,任何找到它的人都可以访问他的帐户。)

只需将电子邮件地址和密码存储在 SQLite 表、plist、文本文件或您想要的任何内容中。最好对密码进行加密,即使没有其他应用程序能够访问您存储密码的文件。

编辑:

顺便说一句,您不必每次请求都将凭据传递给服务器。我不知道您在服务器端使用什么,但您可以将其设置为使用会话,因此他们的用户将在必须重新验证之前停留一段时间。这是我用来发送凭据的一些代码:

NSURLConnection *connection;
NSString *url = [NSString stringWithFormat:@"http://example.com/service/authenticate.ashx"];
NSString *username = [self.usernameField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *password = [self.passwordField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSMutableString* requestURL = [[NSMutableString alloc] initWithString:url];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: [NSString stringWithString:requestURL]]];
[request setHTTPMethod: @"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[request setHTTPBody:[[NSString stringWithFormat:@"username=%@&password=%@", username, password] dataUsingEncoding:NSUTF8StringEncoding]];
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

该 NSURLConnection 对象将管理 cookie 并使用户保持登录状态,因此您可以使用它继续向服务器发送请求,直到会话到期。

于 2012-05-24T19:34:17.493 回答