我已经开发了我的第一个iOS应用程序,允许用户登录到我们网站上的帐户,并查看/添加/编辑/删除数据库中的记录。
我已经写了一个基本的应用程序,它像这样处理这个过程;
应用程序开始运行。
每个视图控制器从viewWillAppear方法中调用一个checkAuth方法。此方法获取应用程序中存储的用户名和密码,将它们作为dataWithContentsOfURL请求中的GET变量发送到服务器。然后检查生成的JSON,如果响应失败,则显示一个警告对话框,并将用户带到另一个选项卡(我使用的是选项卡栏控制器),提示他们输入登录详细信息。
使用此方法时,每次不同的视图控制器接管(我的情节提要文件中的每个场景)时,都会调用auth方法。这看起来有点浪费。有没有更好的方法来确保用户的登录凭证是正确的?
谢谢。
发布于 2012-08-07 00:05:12
将用户名和密码存储在应用程序中是一种糟糕的做法。如果修改后端在您的控制范围之内,那么最好是向后端进行身份验证,并得到一个只对该设备有效的令牌。
在这里,您可以将令牌与每个请求一起传递,如果后端确定您已经注销,那么它应该返回一条错误消息。这样,身份验证将在ad-hoc基础上进行检查,并且仅在发送请求时进行。
我认为没有理由在每次加载视图时都这样做,除非有业务需求。
发布于 2012-08-06 23:57:39
为什么不使用“通信管理”单例来实现这一点呢?它将处理与服务器进行身份验证和通信的所有任务,您的每个控制器都与它对话,而不直接与服务器交互。
发布于 2012-08-07 00:13:00
您可能会有一个非活动会话超时:通过NSTimer。设置成功登录时的会话超时标记(例如,登录时间加10分钟)。当用户使用应用程序时,保持将存储的会话超时时间更新为当前时间加10分钟(使计时器无效并创建一个新计时器)。当应用程序退出或进入后台时,使计时器无效。让计时器在计时器超时时调用注销方法。
哦,不要在应用程序中存储用户名/密码。使用密钥链将它们加密存储(如果需要的话,将它们保存在本地)。我建议只将用户名存储在本地。
https://stackoverflow.com/questions/11831712
复制相似问题