首页 文章

使用AFNetworking(1.3.3)AFHTTPClient和CSRF令牌

提问于
浏览
1

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

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

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

谢谢 .

2 回答

  • 0

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

  • 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;
    

    }

相关问题