如何在AFHTTPRequestOperationManager上将CSRF令牌添加到http头?

Seb*_*ian 0 heroku ruby-on-rails-4 ios7 afnetworking-2

我在heroku创建了一个测试应用程序(使用scaffold),我在这个heroku应用程序中构建了一个iOS客户端(使用AFNetworking 2).我试图使用iOS应用程序从heroku中删除记录,但它无法正常工作.我从服务器收到422状态错误.

查看heroku日志,我发现服务器声称拥有CSRF令牌.所以我尝试在我的iOS客户端上使用此代码执行此操作:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

manager.responseSerializer = [AFHTTPResponseSerializer new];

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", nil];

[manager DELETE:contact.url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Response:  %@", [operation description]) ;
    if (block) {
        block(error);
    }
    NSLog(@"Error: %@", error);
}];
Run Code Online (Sandbox Code Playgroud)

它没用.

如何在AFHTTPRequestOperationManager上将CSRF令牌添加到http标头中?

mat*_*ttt 5

这里有两件事:

  1. 如果您的服务器抱怨缺少CSRF令牌,那么伪造一个不会是正确的解决方案.有关更多信息,请参阅此Stack Overflow答案.虽然您刚开始启动并运行所有内容,但您可以通过protect_from_forgery在API控制器中注释掉调用来暂时禁用此功能.
  2. AFHTTPRequestOperationManager已经初始化AFJSONResponseSerializer,所以你不需要自己设置.您可以添加默认X-XSRF-TOKEN(或任何标题)[manager.requestSerializer setValue:@"..." forHTTPHeaderField:@"..."];