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