Erlaube CORS in Ruby on Rails

8

In meiner Datei config/application.rb habe ich diesen Code,

%Vor%

Aber das erlaubt mir nicht, eine Post-Anfrage an eine Route auf meinem Server zu senden

Safari gibt diesen Fehler:

%Vor%

Und in meiner Rails Server Konsole:

%Vor%     
Ben Aubin 29.03.2015, 02:06
quelle

5 Antworten

13

Ich habe einige Zeit damit verbracht, und ich kann Ihnen sagen, die zuverlässigste Lösung ist die Verwendung von Rack-Cors. siehe: Ссылка

Fügen Sie zuerst den Edelstein hinzu:

%Vor%

dann in application.rb hinzufügen

%Vor%     
errata 03.04.2015, 05:01
quelle
3

Ich konnte das mit Hilfe von @ Akiomis Antwort herausfinden:

In meinem routes.rb habe ich den folgenden Code am Anfang der Datei hinzugefügt:

%Vor%

Als Nächstes habe ich in meinem Anwendungscontroller Folgendes hinzugefügt:

%Vor%

Zusammen mit den Überschriften in config/application.rb :

%Vor%

Ja, beachte die 'Access-Control-Allow-Headers:' => 'Origin, X-Requested-With, Content-Type, Accept' , die nicht in meiner ursprünglichen Frage enthalten war, das ist eines der großen Probleme.

    
Ben Aubin 31.03.2015 16:10
quelle
1

Fügen Sie den folgenden Code hinzu:

In config/routes.rb :

%Vor%

In controllers/student_controller.rb :

%Vor%

Oder Sie können rack-cors verwenden.

    
Akiomi KAMAKURA 31.03.2015 04:20
quelle
0

In einigen Fällen führt ein Browser eine Preflight-Anfrage durch: Anstatt die Anfrage tatsächlich zu machen, führt er zuerst eine OPTIONS-Anfrage an dieselbe URL durch, um herauszufinden, welche Werte die verschiedenen CORS-Header haben (Mehr über Preflight) hier ). Wenn diese Anfrage erfolgreich ist und die Header die richtigen Werte haben, führt sie die eigentliche Anfrage durch.

Sie haben keine Route für diese Optionsanforderungen hinzugefügt, also gehen sie zur Seite rails 404, die die CORS-Header nicht enthält.

Die OPTIONS-Antwort muss nur dieselben CORS-Header festlegen, die Sie normalerweise während einer Anfrage festlegen würden. Es sollte nichts anderes tun. Zum Beispiel

%Vor%

Beachten Sie, dass Sie möglicherweise andere CORS-Header festlegen müssen, z. B. Access-Control-Allow-Credentials , Access-Control-Allow-Headers

Wenn dies funktioniert, sollten Sie in Betracht ziehen, dies etwas zu straffen - Sie öffnen Ihre App möglicherweise, um Site-Scripting-Angriffe zu umgehen.

    
Frederick Cheung 31.03.2015 16:11
quelle
0

Sie können Ursprünge von application_controller

zulassen %Vor%     
puneet18 30.11.2017 06:58
quelle

Tags und Links