我已经创建了一个AFHTTPClient子类作为我朋友的Django服务器的Web服务接口。除了'DELETE'和'POST'请求之外,我们取得了巨大的成功。他的服务器需要一个CSRF令牌,但我不知道如何获取该信息或在我的AFHTTPClient中使用该信息。当我的应用程序登录时,Django服务器当前生成CSRF(我相信标题)。
执行'DELETE'或'POST'失败尝试从他的服务器生成此JSON响应:“CSRF失败:CSRF令牌丢失或不正确。”
最终,我的问题是:您如何使用AFNetworking(AFHTTPClient专门)管理CSRF令牌?
谢谢。
答案 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;
}