如何使用AFIncrementalStore在每个请求中添加认证令牌



我有一个iOS + Rails 3.1应用程序,我使用AFIncrementalStore用于客户端-服务器通信。

我已经根据本教程在我的Rails服务器上实现了令牌身份验证:http://matteomelani.wordpress.com/2011/10/17/authentication-for-mobile-devices/

我现在想在中包含&auth_token=XXXXXXXX从客户端到服务器的每个请求,包括POST请求。我该怎么做呢?我在这篇相关的文章中没有找到解决方案:使用AFIncrementalStore和Auth令牌

UPDATE:这是我的第一次代码尝试,但似乎没有发送auth_token:

(在我的AFIncrementalStoreHTTPClient子类中)

- (NSMutableURLRequest *)requestForFetchRequest:(NSFetchRequest *)fetchRequest withContext:(NSManagedObjectContext *)context {
    NSMutableURLRequest *request = [[super requestForFetchRequest:fetchRequest withContext:context] mutableCopy];
    NSMutableString *requestBody = [[NSMutableString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding];
    [requestBody appendFormat:@"&%@=%@", @"auth_token", @"xkT2eqqdoNp5y4vQy7xA"];
    [request setHTTPBody:[requestBody dataUsingEncoding:NSUTF8StringEncoding]];
    return request;
}

UPDATE:我浏览了您的问题(对不起!),下面我的示例代码适用于常规AFHTTPClient,但不适用AFIncrementalStore。但是,同样的基本方法也可以工作,并且在这个答案中有示例代码,应该会为您指明正确的方向。


你不能在所有情况下都将&auth_token=whatever附加到HTTP正文的末尾。

您可能想要覆盖您的getPath...postPath...方法,如:

- (void)getPath:(NSString *)path 
     parameters:(NSDictionary *)parameters 
        success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
        failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
    if (parameters) {
        // Make a mutable copy and add the "token" parameter to the dictionary
        NSMutableDictionary *mutableParams = [parameters mutableCopy];
        [mutableParams setObject:@"whatever" forKey:@"token"];
        parameters = [NSDictionary dictionaryWithDictionary:mutableParams];
    } else {
        parameters = @{@"token" : @"whatever"};
    }
    [super getPath:path parameters:parameters success:success failure:failure];
}

这种方法将允许AFNetworking根据您的特定请求和编码设置对您的参数进行适当的编码。

如果你滚动你自己的AFHTTPRequestOperation对象,而不是使用方便的方法(你可能不是),只要确保你在你创建你的NSURLRequest之前在parameters 中包含令牌,就像这样:

NSURLRequest *request = [self requestWithMethod:@"GET" path:path parameters:parameters];

相关内容

  • 没有找到相关文章

最新更新