2012-12-12 178 views
3

我已经开始致力于开发利用基于REST的Web服务(使用restEASY在Java中实现)的iOS应用程序的概念证明。我将使用RestKit作为我的客户端服务库,并且一直在阅读文档和一些示例。RestKit - 处理身份验证

绝大多数服务都要求用户使用用户名和密码进行身份验证。我们有认证服务,可以接受包含凭证的JSON对象,因此这部分很容易。我的问题是,当服务说需要身份验证时,我们如何处理iOS部分?

想象一下这个场景......

用户启动了我们的应用程序,其识别出用户需要进行身份验证。模式视图控制器弹出,提示用户进行认证,并提交请求。用户然后可以进行一堆REST调用而没有任何问题。最终,他们关闭手机(应用程序仍处于活动状态),并在稍后一小时左右回复。他们点击一个按钮来触发另一个REST呼叫,但是此时服务器端会话已过期。

理想情况下,我们希望能够识别出服务器已指示需要验证,并再次弹出模态视图控制器。但是,RestKit是否支持这个?有没有办法让我们注册一个能够识别服务器以这种方式响应的“全局响应处理程序”?

我们可以用JSON返回状态码或使用HTTP状态码。我们的服务具有灵活性。真正的问题是如何以理想的方式在客户端处理这个问题。而且,一旦我们对用户进行了重新认证,是否有任何方法可以重播他们最初尝试提交的请求?或者,他们是否必须再次开始行动?

对不起,如果这没有意义,或者如果这是一个非常简单的问题来解决。由于我刚刚开始使用RestKit,我想确保我以正确的方式避免未来的问题。任何建议,代码示例,教程等,你可以提供将非常感激。

回答

3

我会建议你做你的AppDelegate到服务器的请求 - (void)applicationDidBecomeActive:(UIApplication *)application- (void)applicationWillEnterForeground:(UIApplication *)application方法发送旧认证令牌。如果令牌有效或无效,服务器可以提供响应。 如果你的AppDelegate采用RKObjectLoaderDelegate协议,那么它可以处理响应。这样,只要应用程序变为活动状态,就会提示用户在必要时重新进行身份验证。