所以基本上我想实现的目的是保持用户始终登录,不用打扰用户手动填写用户名和密码。当然,有必要在第一时间登录,然后我将凭证存储在钥匙串中,并在需要时(例如,从服务器给出的令牌到期),我想要自动获取这些凭证,重新登录用户并重试上次请求,以便用户获得很棒的经验。保持用户登录(重试HTTP请求)
在NSScreencast上有这个漂亮的光滑的结构来解决这个问题。它适合我的需求,但...我想使用AFHTTPSessionManager
而不是AFHTTPRequestOperation
。如果您曾与AFNetworking 2AFHTTPSessionManager
方法返回NSURLSessionDataTask
在success:
和failure:
块当AFHTTPRequestOperation
返回AFHTTPRequestOperation
因此很容易重用它。
我的工作流程是这样的:
我向服务器发送一个请求,我得到我处理propely响应......当请求succeds我得到responseObject
,做任何我想要它,但是当我收到错误时,我检查它是否是401,如果是,我想调用retryLogin
方法(重要!此方法只能执行一次,我必须通过该请求)。在这个方法里面,我检查我是否有存储在Keychain中的证书,如果是,我调用我通过这个请求的授权方法,如果授权失败,我向用户显示LoginViewController的视图以输入新的证书。
它看起来像一块蛋糕,但问题是如何更重要的是呼吁retryLogin
只有一次, - 如何获得从NSURLSessionDataTask
的要求?我想要这个应用程序使用iOS 7的方法,所以它是NSURLSession
,以防万一旧的方法被弃用。
我知道存在一些安全问题,但是...这是因为糟糕的API设计。但我真的很感谢你的贡献。这是一个投票来说服我的服务器开发人员实现OAuth2! – cojoj
如果您确实需要,我会抽象为第二个登录请求提供所需信息给某个对象,并用它来构建新的请求并执行。 –