Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Restkit 0.20-使用新令牌更改授权标头_Ios_Authorization_Restkit_Token - Fatal编程技术网

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

Ios Restkit 0.20-使用新令牌更改授权标头,ios,authorization,restkit,token,Ios,Authorization,Restkit,Token,我在iOS应用程序中使用Restkit调用API 当应用程序首次启动时,将从API检索客户端令牌,以便调用服务发布新用户 成功创建此用户后,API将发回一个新的访问令牌。这一次,它是一个用户令牌 应用程序对API发出的所有其他请求现在都必须使用此用户令牌 我使用的是从RKObjectManager继承的单例类。然后,我为每个资源构建了一个类来访问示例:用户、图像。。。所有这些都是从名为AKObjectManager的主类继承的 在AKObjectManager中,我有以下方法: + (insta

我在iOS应用程序中使用Restkit调用API

当应用程序首次启动时,将从API检索客户端令牌,以便调用服务发布新用户

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

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

我使用的是从RKObjectManager继承的单例类。然后,我为每个资源构建了一个类来访问示例:用户、图像。。。所有这些都是从名为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;
...
它起了作用,但我对它的实施不太满意


你能告诉我哪里弄错了,并就如何做提出建议吗?

你可能是因为创建了这么多子类和不同的实例而弄错了。您是否有超类AKObjectManager和子类UserManager的实例?你需要简化和巩固你正在做的事情。考虑使用类别而不是子类…谢谢!对于API的每个ressource,我都有AKObjectManager的子类。现在,它是其中4个配置文件,用户,登录和错误。我认为这将是一个基于Ray Wenderlich tuto的好方法。但最终我可能发现了问题所在。我认为这一切都是因为[nsuser]。这会减慢代码其他部分的速度,可能是解释的一部分。我通常会为每个基本URL使用一个对象管理器,并使用类别为该基本URL中的不同端点拆分代码。