【问题标题】:Using AFNetworking (1.3.3) AFHTTPClient and CSRF Tokens使用 AFNetworking (1.3.3) AFHTTPClient 和 CSRF 令牌
【发布时间】:2014-01-18 17:19:45
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: objective-c django afnetworking csrf


    【解决方案1】:

    CSRF 令牌作为 cookie 与每个 HTTP 响应一起发送。您需要在每个 POST/PUT/... 请求中将其发送回 X-CSRFToken 标头中,就像对 AJAX 请求所做的那样。另见the official documentation

    【讨论】:

    • 这个明白了,真正的问题是如何访问和管理Objective-C的AFNetworking AFHTTPClient API中的X-CSRFToken header。
    • 你找到解决办法了吗?
    【解决方案2】:

    你可以像这样从 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;
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 2021-06-29
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      相关资源
      最近更新 更多