1

如何让 AFOAuth1Client 与 AFIncrementalStore 一起使用?

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

AFRESTClient 的方法“setAuthorizationHeaderWithToken:”需要一个字符串,并且存储在令牌中的所有属性似乎都不起作用。我需要在这里做什么?我完全不正确吗?我的理解是 AFOAuth1Client 应该只用于获取令牌,但我开始认为我可能偏离了方向。

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

4

2 回答 2

1

我打算建议修改 AFRESTClient 以从 AFOAuth1Client 继承,但我发现这个拉取请求,其中 Matt 声明 AFOAuth1Client 是为了与您的客户端子类分开:https ://github.com/AFNetworking/AFOAuth1Client/pull/6

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

结合上述 Matt 的指导,我认为您应该将 authClient 属性添加到您的 Client 子类中,然后将该客户端计算的令牌添加到您自己的请求中 - 类似于 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 authorizeUsingOAuthWithRequestTokenPath:...]

于 2013-07-11T23:32:27.550 回答
0

后来灵感一闪而过,这是我采用的解决方案:

在我的子类中AFRESTClient,我像这样覆盖- (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;
}

正如预期的那样,使用 OAuth 令牌进行了AFRESTClient通话,我开始参加比赛。如果我遇到任何意外的副作用,我会更新它,但到目前为止它看起来很可靠。

于 2013-07-13T15:56:42.327 回答