使用AFNetworking(1.3.3)AFHTTPClient和CSRF令牌

时间:2013-12-31 20:41:30

标签: objective-c django afnetworking csrf

我已经创建了一个AFHTTPClient子类作为我朋友的Django服务器的Web服务接口。除了'DELETE'和'POST'请求之外,我们取得了巨大的成功。他的服务器需要一个CSRF令牌,但我不知道如何获取该信息或在我的AFHTTPClient中使用该信息。当我的应用程序登录时,Django服务器当前生成CSRF(我相信标题)。

执行'DELETE'或'POST'失败尝试从他的服务器生成此JSON响应:“CSRF失败:CSRF令牌丢失或不正确。”

最终,我的问题是:您如何使用AFNetworking(AFHTTPClient专门)管理CSRF令牌?

谢谢。

2 个答案:

答案 0 :(得分:0)

CSRF令牌作为cookie发送,每个HTTP响应。您需要在每个POST / PUT / ...请求中将其发送回X-CSRFToken标头,就像为AJAX请求完成一样。另请参阅the official documentation

答案 1 :(得分:0)

你可以从像这样的cookie中获取csrf:

+(NSString *)getCSRFFromCookie {

NSArray* cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:API_SERVER_URL]];
NSLog(@"cookie csrf %@",    [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]);

NSString* strCookieValue=@"";
for(NSHTTPCookie* cookie in cookies) {
      if([cookie.name isEqualToString:@"csrftoken"])
        return cookie.value;
}

return strCookieValue;

}