Restkit 0.20 - 使用新令牌更改授权标头

时间:2014-08-07 16:59:10

标签: ios authorization restkit token

我在我的iOS应用中使用Restkit来调用API。

首次启动应用时,会从API中检索客户端令牌,以便调用该服务发布新用户。

成功创建此用户后,API会发回一个新的访问令牌。这次是用户令牌。

应用程序对API发出的所有其他请求现在都必须使用此用户令牌。

我使用的是继承自RKObjectManager的单例类。然后,我为每个ressource构建了一个类来访问(例如:Users,Images,...),这些类都继承自名为AKObjectManager的主类。

在AKObjectManager中,我有以下方法:

+ (instancetype)sharedManager
{
    NSURL *url = [NSURL URLWithString:LLY_API_BASE_URL];

   AKObjectManager *sharedManager  = [self managerWithBaseURL:url];
   sharedManager.requestSerializationMIMEType = RKMIMETypeJSON;

   ...

   // Access Token
   NSUserDefaults* userData = [NSUserDefaults standardUserDefaults];
   if ([userData objectForKey:@"accessToken"]) {
       // Not too sure if this is being taken into account for the other class that inherits
    [   sharedManager.HTTPClient setDefaultHeader:@"Authorization" value:[userData objectForKey:@"accessToken"]];
   }

   return sharedManager;
}

我认为通过检查NSUserDefaults中的accessToken并在标头的Authorization字段中设置它的每次访问都可以,但是没有。我可以通过NSLog看到新的访问令牌在更改时因为某些原因而设置使用Charles,请求的标题仍然指向旧的。

然后我用

[[AKObjectManager sharedManager].HTTPClient setDefaultHeader:@"Authorization" value:accessToken.accessToken];

我一收到新令牌但面临同样的问题。

最后我走了那条路(UserManager继承自AKObjectManager)

// Force the newly refresh token to be set in the Authorization header
[[UserManager sharedManager].HTTPClient setDefaultHeader:@"Authorization" value:[[NSUserDefaults standardUserDefaults] objectForKey:@"accessToken"]];
[[UserManager sharedManager] show:nil // userId equals nil meaning it will be replaced by 'self'
                          success:^(User* user){
                              self.user = user;
...

它有效,但我对实施不太满意。

你能指出我错在哪里并建议怎么做吗?

0 个答案:

没有答案