我有一个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];