0

我正在开发我的第一个 iOS 应用程序,它允许用户登录我们网站上的帐户,并查看/添加/编辑/删除数据库中的记录。

我编写了一个基本的应用程序来处理这样的过程;

应用程序开始运行。

checkAuth每个视图控制器从方法中调用一个viewWillAppear方法。此方法获取存储在应用程序中的用户名和密码,并将它们作为请求中GET的变量发送到服务器dataWithContentsOfURL。然后检查结果JSON,如果响应失败,则会显示一个警报对话框,并且用户被带到另一个选项卡(我正在使用选项卡栏控制器),提示他们输入登录详细信息。

使用此方法,每次不同的视图控制器接管(我的故事板文件中的每个场景)时,都会调用 auth 方法。这似乎有点浪费。有没有更好的方法来确保用户登录凭据正确?

谢谢。

4

3 回答 3

3

你为什么不为此使用“通信管理”单例?它将处理与服务器进行身份验证和通信的所有任务,并且您的每个控制器都与它进行对话,而无需直接与服务器交互。

于 2012-08-06T15:57:39.310 回答
3

在应用程序中存储用户名和密码是不好的做法。如果修改后端在您的控制范围内,最好对后端进行身份验证,并取回仅对该设备有用的令牌。

从这里,您将令牌与每个请求一起传递,如果后端确定您已注销,那么它应该返回一条错误消息。这样,身份验证将在临时基础上进行检查,并且仅在发送请求时进行。

我认为没有理由在每次加载视图时都这样做,除非对此有业务需求。

于 2012-08-06T16:05:11.570 回答
1

您可能会遇到不活动会话超时:通过 NSTimer。在成功登录时设置会话超时标记(例如登录时间加上 10 分钟)。当用户使用应用程序时,不断将存储的会话超时时间更新为当前时间加上 10 分钟(使计时器无效并创建一个新计时器)。当应用程序退出或进入后台时,计时器无效。当计时器超时时,让计时器调用注销方法。

哦,不要在应用程序中存储用户名/密码。使用钥匙串加密存储它们(如果需要将它们保存在本地)。我建议只将用户名存储在本地。

于 2012-08-06T16:13:00.200 回答