如何使用RestKit自动处理令牌刷新

时间:2014-05-23 08:49:34

标签: ios objective-c restkit restkit-0.20

我有一个你可以想象的项目就像Facebook应用程序一样,我很难掌握如何使用RestKit组织它并处理令牌,因为我是一名RestKit初学者。

这是我到目前为止所得到的:

  • 核心数据NSManagedObject类,对于每个类我添加了一个名为REST的类别,它具有提供RKObjectMapping和RKRouteSet的功能
  • 自定义RKObjectManager子类,用于处理设置标头,MIME类型,设置授权标头和核心数据存储
  • RKObjectRequestOperation子类

如果您有组织建议,但我的主要问题是如何在收到401 HTTP状态代码并使用新令牌再次触发失败的请求后实现自动令牌刷新?

我开始重写我的RKObjectRequestOperation子类中的metod:

- (void)setCompletionBlockWithSuccess:(void ( ^ ) ( RKObjectRequestOperation *operation , RKMappingResult *mappingResult ))success failure:(void ( ^ ) ( RKObjectRequestOperation *operation , NSError *error ))failure

所以现在我可以拦截一个401响应,但现在我必须再次调用刷新令牌,然后用新令牌重新排队失败的操作,请告知如何做到这一点。

1 个答案:

答案 0 :(得分:3)

如果您使用对象管理器,我通常不会使用自定义RKObjectRequestOperation。我会在对象管理器级别处理它。

在对象管理器中,您可以覆盖每个主要请求方法(随成功和失败块提供)。您可以实现这些方法来调用super,但用新版本替换成功和失败块,在调用提供的版本之前添加一些逻辑。

现在,附加逻辑将检查响应状态。如果它显示需要令牌刷新,则可以对其进行操作,然后对象管理器可以使用第一个请求中提供的参数触发新的加载。

此外,除非文档声明支持该操作,否则不应重新排队操作,因为某些操作在第二次执行时将无法运行...