2010-11-27 8 views
1

Я хочу предоставить пользователям доступ к моему API (размещенному на heroku.com) со своих сайтов. Но возникает странная проблема, когда я хочу, чтобы они разрешали отправлять сообщения на api:Rails POST не извлекает никаких параметров пути, запроса или запроса

Данные, отправленные с правильной формы с правильным URL-адресом действия (например, «http://myapp.com/projects/123/ tasks/321/todos ") - параметры становятся сериализованными и отправляются через jQuery - я сталкиваюсь с« ActionController :: MethodNotAllowed »с дополнительной информацией:« Разрешены только запросы на получение и отправку », который перенаправляет на Index ApplicationController # с : method =>: параметры.

Rails не извлекает параметры для project_id (123) и task_id (321) из URL-адреса, а также не имеет никаких дополнительных параметров_параметра, пути_параметров или запросов_параметров.

Это поведение происходит, когда я отправляю POST с внешних сайтов, но не возникает, при отправке с html-страницы на моем локальном компьютере. Моя первая мысль была о неправильном кодировании, но как исправить эту проблему.

Редактировать: Я использую authlogic (не разрабатываю: -D), а для: create action защита_from_forgery уже пропущена.

Любые предложения оценили

ответ

0

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

0

я предполагаю, что происходит, потому что рельсы пытается защитить свои атаки CSRF форму.

Вы можете прокомментировать строку protect_from_forgery в своем ApplicationController, чтобы ее проверить.

, но я не уверен, что это правильный способ решения этой проблемы в производственной среде.

+0

Я отредактировал мое сообщение, так что теперь ясно, что для создания protect_from_forgery уже пропущено - thx для вашего предложения в любом случае! – 2010-11-27 16:55:49

0

Хорошо. На этот раз я постараюсь ответить на правильный вопрос (см. Другой комментарий).

Итак, я подумал об этом, и мне интересно, это случай вызова jQuery, пытающегося выполнить запрос PUT? Когда вы используете локальную форму, Rails будет POST данных, но добавьте дополнительное поле _method для эмуляции PUT.

Не знаю, используете ли вы jquery-rails, но это позаботится о настройке параметра _method и перевода глагола PUT/POST для вас в ваших вызовах AJAX.

Смежные вопросы