2017-02-27 3 views
0

Ich habe Probleme, eine GET-Anfrage an einen API-Endpunkt zu stellen. Ich weiß, dass hinter den Kulissen Sicherheit herrscht. Ich verwende React-Rails und in meinem componentDidMount einen Ajax-Aufruf an einen API-Endpunkt. Ich gebe auch eine X-Auth-Token in meinen Headern.Rails-CORS-Problem mit Ajax-API-Endpunkt Anforderung

Meine Konsole Fehler:

XMLHttpRequest cannot load "/api/end/point..." Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:3000 ' is therefore not allowed access. The response had HTTP status code 401.

Mein Ajax-Aufruf suchen wie

$.ajax({ url: "my/api/endpoint...", headers: {"X-Auth-Token": "My API token..."}, 
    success: (response) => { console.log(response); } }) 

Antwort

0

Da Frontend-Anfragen von jeglicher Herkunft (jeder Client) tun wird, müssen Sie CORS von jeglicher Herkunft ermöglichen . Versuchen Sie

# config/initializers/cors.rb 
Rails.application.config.middleware.insert_before 0, Rack::Cors do 
    allow do 
    origins '*' 
    resource '*', 
     headers: :any, 
     methods: [:get, :post, :put, :patch, :delete, :options, :head] 
    end 
end 

Ich benutze dies in einer Schiene 5 API-Anwendung. Vor Schienen 5 fügen Sie rack-cors Edelstein zu Ihrem Gemfile hinzu. Wie auch immer, starte deinen Server neu.

Schienen 3/4

# config/application.rb 
module YourApp 
    class Application < Rails::Application 

    config.middleware.insert_before 0, "Rack::Cors" do 
     allow do 
     origins '*' 
     resource '*', :headers => :any, :methods => [:get, :post, :options] 
     end 
    end 
    end 
end 
+0

Dank Ursus, fügte ich das Rack-cors Juwel und der Code beschrieben Sie wie oben und noch kein Glück. Ich habe auch meine protect_from_forgery mit:: null_session, wenn das in meinem application_controller wichtig ist. Irgendwelche Ideen, was ich sonst noch falsch machen könnte? – John

+0

Ich habe meine Antwort für Schienen 3/4 aktualisiert. Versuchen Sie das und starten Sie Ihren Server neu. – Ursus

+0

Ich benutze Schienen 5, und versuchte beide Möglichkeiten beim Neustart des Servers und immer noch kein Glück. Ich bekomme in der Konsole: "XMLHttpRequest kann nicht laden http: // api/end/point ... (mein API-Endpunkt) Antwort auf Preflight-Anfrage nicht übergeben Kontrolle der Zugriffskontrolle: Nein" Access-Control-Allow-Origin "Header ist auf der angeforderten Ressource vorhanden. Daher ist 'http: // localhost: 3000' für den Zugriff nicht zulässig. Die Antwort hatte den HTTP-Statuscode 401. " Vielen Dank! – John

Verwandte Themen