我有一个iOS + Rails 3.1应用程序,我正在使用 AFIncrementalStore 进行客户端 - 服务器通信。
我已根据本教程在我的Rails服务器上实现了令牌身份验证:http://matteomelani.wordpress.com/2011/10/17/authentication-for-mobile-devices/
我现在想要在客户端到服务器的每个请求中包含&auth_token=XXXXXXXX
,包括POST请求。我该怎么办?我在相关帖子中找不到解决方案:Using AFIncrementalStore with an Auth token
更新:这是我的第一次尝试代码,但似乎没有发送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;
}
答案 0 :(得分:1)
更新:我浏览了你的问题(抱歉!),我的示例代码适用于常规AFHTTPClient,但不适用于AFIncrementalStore。但是,相同的基本方法也可行,并且sample code at this answer应指向正确的方向。
在所有情况下,您不能只将&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
对象而不是使用便捷方法(可能不是),请确保在parameters
之前加入令牌你像这样创建你的NSURLRequest:
NSURLRequest *request = [self requestWithMethod:@"GET" path:path parameters:parameters];