Ios 如何将Auth1客户端与AFIncrementalStore一起使用
如何让Auth1客户端与AFIncrementalStore一起工作 我能够使用AFOAuth1Client获取AFOAuth1Token的有效实例,并且能够将其保存到密钥链以供重用。我的AFOAuth1Client的单例实例能够使用令牌进行调用,但我不确定如何将其传递给实现AFIncrementalStoreHTTPClient协议的AFRESTClient实例使用 AFRESTClient的方法“setAuthorizationHeaderWithToken:”需要一个字符串,而存储在标记中的属性似乎都不起作用。我需要在这里做什么?我这样做完全不对吗?我的理解是,AFOAuth1客户只应用于获取代币,但我开始认为我可能偏离了方向Ios 如何将Auth1客户端与AFIncrementalStore一起使用,ios,objective-c,oauth,afnetworking,Ios,Objective C,Oauth,Afnetworking,如何让Auth1客户端与AFIncrementalStore一起工作 我能够使用AFOAuth1Client获取AFOAuth1Token的有效实例,并且能够将其保存到密钥链以供重用。我的AFOAuth1Client的单例实例能够使用令牌进行调用,但我不确定如何将其传递给实现AFIncrementalStoreHTTPClient协议的AFRESTClient实例使用 AFRESTClient的方法“setAuthorizationHeaderWithToken:”需要一个字符串,而存储在标记中
编辑:可能是问题的更简洁版本:如何让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的最佳实践