Ios 如何将Auth1客户端与AFIncrementalStore一起使用

Ios 如何将Auth1客户端与AFIncrementalStore一起使用,ios,objective-c,oauth,afnetworking,Ios,Objective C,Oauth,Afnetworking,如何让Auth1客户端与AFIncrementalStore一起工作 我能够使用AFOAuth1Client获取AFOAuth1Token的有效实例,并且能够将其保存到密钥链以供重用。我的AFOAuth1Client的单例实例能够使用令牌进行调用,但我不确定如何将其传递给实现AFIncrementalStoreHTTPClient协议的AFRESTClient实例使用 AFRESTClient的方法“setAuthorizationHeaderWithToken:”需要一个字符串,而存储在标记中

如何让Auth1客户端与AFIncrementalStore一起工作

我能够使用AFOAuth1Client获取AFOAuth1Token的有效实例,并且能够将其保存到密钥链以供重用。我的AFOAuth1Client的单例实例能够使用令牌进行调用,但我不确定如何将其传递给实现AFIncrementalStoreHTTPClient协议的AFRESTClient实例使用

AFRESTClient的方法“setAuthorizationHeaderWithToken:”需要一个字符串,而存储在标记中的属性似乎都不起作用。我需要在这里做什么?我这样做完全不对吗?我的理解是,AFOAuth1客户只应用于获取代币,但我开始认为我可能偏离了方向


编辑:可能是问题的更简洁版本:如何让AFOAuth1Client与AFIncrementalStore一起工作?

我打算建议修改AFRESTClient以从AFOAuth1Client继承,但我发现了这个pull请求,Matt指出AFOAuth1Client应该与您的客户端子类分开:

我广泛使用了AFNetworking,但我编写了自己的身份验证,而不是使用AFOAuth1Client。因为我在AFHTTPClient子类中重写了requestWithMethod。授权头不是静态的,它取决于每个请求的路径和参数

结合上面Matt的指导,我认为您应该将authClient属性添加到您的客户端子类中,然后将该客户端计算的令牌添加到您自己的请求中-类似于AFOAuth1Client本身的方式

我不确定这一点,但我愿意试一试

//在AFRestClient子类中

@property(nonatomic, strong) AFOAuth1Client *authClient;
...

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
                                  path:(NSString *)path
                            parameters:(NSDictionary *)parameters
{

   NSMutableURLRequest *request = [super requestWithMethod:method path:path parameters:parameters];

   NSString *authorizationHeader = [self.authClient authorizationHeaderForMethod:method path:path parameters:parameters];
   [request setValue:authorizationHeader forHTTPHeaderField:@"Authorization"];


  return request;
}

在发出第一个请求之前,您将初始化authClient并获得[self.authClient AuthorizationUsingAuthWithRequestTokenPath:…]

我建议修改AFRESTClient以从AFOAuth1Client继承,但是我发现了这个pull请求,Matt声明AFOAuth1Client应该与您的客户端子类分开:

我广泛使用了AFNetworking,但我编写了自己的身份验证,而不是使用AFOAuth1Client。因为我在AFHTTPClient子类中重写了requestWithMethod。授权头不是静态的,它取决于每个请求的路径和参数

结合上面Matt的指导,我认为您应该将authClient属性添加到您的客户端子类中,然后将该客户端计算的令牌添加到您自己的请求中-类似于AFOAuth1Client本身的方式

我不确定这一点,但我愿意试一试

//在AFRestClient子类中

@property(nonatomic, strong) AFOAuth1Client *authClient;
...

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
                                  path:(NSString *)path
                            parameters:(NSDictionary *)parameters
{

   NSMutableURLRequest *request = [super requestWithMethod:method path:path parameters:parameters];

   NSString *authorizationHeader = [self.authClient authorizationHeaderForMethod:method path:path parameters:parameters];
   [request setValue:authorizationHeader forHTTPHeaderField:@"Authorization"];


  return request;
}

在发出第一个请求之前,您将初始化authClient并获得[self.authClient authorizationUsingAuthWithRequestTokenPath:…]

一个灵感闪现,下面是我使用的解决方案:

在我的
AFRESTClient
子类中,我用方法:path:parameters:覆盖了
-(NSMutableRequest*)requestWithMethod:path:parameters:
,如下所示:

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
                                      path:(NSString *)path
                                parameters:(NSDictionary *)parameters
{     
    NSMutableURLRequest *request = [[MyAFOAuth1ClientSubclass sharedClient] 
                                        requestWithMethod:method
                                                     path:path
                                               parameters:parameters];

    return request;
}

这使得
AFRESTClient
像预期的那样使用OAuth令牌进行调用,我就去参加比赛了。如果我遇到任何意外的副作用,我会更新它,但到目前为止,它看起来相当可靠。

一个可靠的灵感闪现,下面是我使用的解决方案:

在我的
AFRESTClient
子类中,我用方法:path:parameters:覆盖了
-(NSMutableRequest*)requestWithMethod:path:parameters:
,如下所示:

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
                                      path:(NSString *)path
                                parameters:(NSDictionary *)parameters
{     
    NSMutableURLRequest *request = [[MyAFOAuth1ClientSubclass sharedClient] 
                                        requestWithMethod:method
                                                     path:path
                                               parameters:parameters];

    return request;
}

这使得
AFRESTClient
像预期的那样使用OAuth令牌进行调用,我就去参加比赛了。如果我遇到任何意外的副作用,我会更新它,但到目前为止它看起来相当可靠。

它们都是从AFHTTPClient继承的,所以我认为这是不可能的。AFRESTClient是在AFIncrementalStore框架中定义的。感谢您的回复!它看起来像AuthorizationHeadPerformMethod:path:parameters:是一个在Auth1Client中声明的私有方法,因此我必须修改头以公开它(除非我在那里遗漏了什么)。我怀疑这会带来什么伤害,但我很想听听你的想法。再次感谢你的帮助。这让我错了两次。但在这方面似乎真的没有什么指导。我确实在这里找到了一个AFOAuth2Client示例项目:它通过在主AFHTTPClient子类上调用setAuthorizationHeaderWithToken来使用返回的令牌。试试看,如果这不起作用,考虑发送一条推特或电子邮件给Matt Thompson。我通过twitter联系了他,并在AFIncrementalStore的GitHub页面上发布了一个问题,询问现有解决方案或补丁的最佳实践。我也会提到这个问题。这是GitHub链接,如果你想加入的话:谢谢。我会看着线不称重。我已经够尴尬的了!:-)它们都是从一个HttpClient继承的,所以我认为这是不可能的。AFRESTClient是在AFIncrementalStore框架中定义的。感谢您的回复!它看起来像AuthorizationHeadPerformMethod:path:parameters:是一个在Auth1Client中声明的私有方法,因此我必须修改头以公开它(除非我在那里遗漏了什么)。我怀疑这会带来什么伤害,但我很想听听你的想法。再次感谢你的帮助。这让我错了两次。但在这方面似乎真的没有什么指导。我确实在这里找到了一个AFOAuth2Client示例项目:它通过在主AFHTTPClient子类上调用setAuthorizationHeaderWithToken来使用返回的令牌。试试看,如果这不起作用,考虑发送一条推特或电子邮件给Matt Thompson。我通过twitter联系了他,并在AFIncrementalStore的GitHub页面上发布了一个问题,询问现有解决方案或patc的最佳实践