Ошибка 404 при публикации на рельсы с RestKit iOS 5 - PullRequest
0 голосов
/ 11 января 2012

У меня странная проблема с Restkit + iOS 5 + Rails: когда я пытаюсь сделать сообщение на сервере, например:

NSArray *topicsList=[self.topicsTV.text componentsSeparatedByString:@","]; 
RKParams *params = [NSDictionary dictionaryWithObjectsAndKeys: self.questionTV.text,@"question[text]", 
                                                               self.descriptionTV.text,@"question[detail]",                       
                                                                topicsList,@"topics[]", nil
                    ];
[[RKClient sharedClient] post:@"/questions.json" params:params delegate:self];

Журнал будет выглядеть так:

2012-01-11 17:24:21.725 APP[29087:fb03] I restkit.network:RKRequest.m:562 Status Code: 401
2012-01-11 17:24:21.725 APP[29087:fb03] I restkit.network:RKRequest.m:563 Body: {"error":"You have to register or login."}

Обратите внимание, что перед публикацией я вошел в систему на 100%, потому что я мог получить доступ к некоторому частному контенту, и произошло то, что, если я обновляю частный контент (отправляемый на сервер), он выдает мне эту ошибку:

2012-01-11 17:35:51.337 APP[29087:fb03] D restkit.network.queue:RKRequestQueue.m:455 Request <RKObjectLoader: 0x811c360> failed loading in queue <RKRequestQueue: 0xc60ea10 name=(null) suspended=NO requestCount=0 loadingCount=0/5> with error: The operation couldn’t be completed. (org.restkit.RestKit.ErrorDomain error 1004.).(Now loading 0 of 5).

Эта операция вышла из системы?Как мне поддерживать сеанс входа в систему живым?

1 Ответ

0 голосов
/ 31 января 2012

Может случиться так, что приложение rails не может проверить токен CSRF, когда ваше приложение выполняет запрос POST.Когда вы запускаете запрос GET, ему не нужно проверять токен (потому что запросы GET ничего не меняют).Вот почему вы можете получить что-нибудь с именем пользователя и паролем, но не можете что-то POST.Это сообщение в блоге содержит дополнительную информацию.

Что мне помогло, так это то, что я отключил проверку для любого запроса JSON.

# In your application_controller.rb
skip_before_filter :verify_authenticity_token, :if => Proc.new { |c| 
  c.request.format == 'application/json' }

Конечно, вы также можетесделайте это:

# Or this in your application_controller.rb
def verified_request?
  if request.content_type == "application/json"
    true
  else
    super()
  end
end

Любой из них позволяет запросам JSON игнорировать токен, и вы можете CRUD соответствующим образом.Просто знайте, что вы делаете, если решите проигнорировать чек.

Также: https://github.com/rails/rails/issues/3041

...