2010-11-27 4 views
1

Ich möchte Benutzern Zugriff auf meine API (auf heroku.com gehostet) von ihren Websites gewähren. Aber ein seltsames Problem tritt auf, wenn ich will, dass sie auf die api schreiben können:Rails POST extrahiert keine Pfad-, Abfrage- oder Anforderungsparameter

Daten gesendet von einem korrekten Formular mit der richtigen Aktion-URL (zB "http://myapp.com/projects/123/ tasks/321/todos ") - die params werden serialisiert und senden über jQuery - ich begegne einem" ActionController :: MethodNotAllowed "mit der zusätzlichen Information:" Nur get und post-Anfragen sind erlaubt ", die mit ApplicationController # index umleitet : Methode =>: Optionen.

Rails extrahiert nicht die Parameter für project_id (123) und task_id (321) aus der URL, noch sind weitere request_parameters, path_parameters oder query_parameters verfügbar.

Dieses Verhalten tritt auf, wenn ich POST von externen Websites, aber nicht bei der Buchung von einer HTML-Seite auf meinem lokalen Computer auftritt. Mein erster Gedanke war die falsche Codierung, aber wie kann ich das Problem beheben?

Edit: Ich benutze authlogic (nicht entwickeln: -D) und für die: create Aktion die protect_from_forgery ist bereits übersprungen.

Irgendwelche Vorschläge geschätzt

Antwort

0

Das Problem trat aufgrund der Cross-Domain-Richtlinie - die Anfrage wurde von einer anderen Domäne - und weil ich einen aktuellen Browser, der unterstützt CORS unterstützt, es war Senden einer OPTIONS-Anfrage zuerst, um vom Server bekannt zu bekommen, die Aktionen sind für diese Domain erlaubt.

0

Ich denke, das passiert, weil Schienen versucht, Ihre Form CSRF-Attacken zu schützen.

können Sie die protect_from_forgery Zeile in Ihrem ApplicationController auskommentieren, um es zu testen.

aber ich bin nicht sicher, ob das der richtige Weg ist, mit diesem Problem in der Produktionsumgebung umzugehen.

+0

Ich habe meinen Beitrag bearbeitet, so dass jetzt klar ist, dass für die Erstellung die protect_from_forgery bereits übersprungen ist - thx für deinen Vorschlag trotzdem! –

0

Okay. Ich werde versuchen, diesmal die richtige Frage zu beantworten (siehe anderen Kommentar).

Also habe ich darüber nachgedacht, und ich frage mich, ist dies ein Fall der jQuery Aufruf versucht eine PUT Anfrage? Wenn Sie das lokale Formular verwenden, werden Rails die Daten POST, aber fügen Sie das zusätzliche _method Feld hinzu, um ein PUT zu emulieren.

Ich weiß nicht, ob Sie jquery-rails verwenden, aber dies kümmert sich darum, den _method-Parameter und die PUT/POST-Verbübersetzung für Sie in Ihren AJAX-Anrufen einzustellen.

Verwandte Themen