2017-06-24 3 views
1

Ich versuche Omniauth zu verwenden, um meinen Client auf eine externe Service-Autorisierungsseite zu leiten. Mein Client verwendet ember.js und mein Server ist ein Rails-Server. Wie die Dinge stehen, bin ich in der Lage den Anruf mit wenig Problem auf meiner Server-Seite zu machen, aber mein Mandant nicht umleiten, Thöring mir einen Fehler beim LesenKein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden. Herkunft 'Null' ist daher nicht erlaubt

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 404.

einige der Forschung hat gezeigt, dass ich verwenden müssen CORS, die ich installiert und konfiguriert habe. Jetzt muss ich nur wissen, wo und wie ich den access-control-allow-origin Header auf meinen Code anwende. Kann mir jemand bei diesem Problem helfen?

meine Route:

get 'auth/:provider/callback' => 'sessions#create' 

meine Sitzungen Controller:

class SessionsController < ApplicationController 
    def create 
    @request.env 
    auth = request.env['omniauth.auth'] 
    Account.recieve_donation(auth) 
    end 
end 

Antwort

0

Hier ist, was Sie tun müssen, wenn Sie GET-Anfrage machen, Ihre Client-Anfrage Origin-Header senden und dann muss Ihr Server den Access-Control-Allow-Origin-Header in der Antwort senden. Die Werte beider Header müssen gleich sein, um eine gemeinsame Ressourcennutzung zu ermöglichen.

+0

Wo ich die 'Origin' Header Client-Seite fügen und die' Access-Control-Allow-Origin' header serverseitig? Was genau sollten sie sein? Wenn ich die Anfragephase starten kann, heißt das, dass ich schon gut bin: Access-Control-Allow-Origin serverseitig? – d00medman

+0

Ich benutze nicht Ember und Rails, aber in allen Sprachen und Frontend-Frameworks, wenn Sie eine Anfrage bekommen, können Sie einige zusätzliche Header mit der Anfrage angeben und in den Schienen können Sie Header setzen, während Sie die Antwort senden. –

+0

hmm, dann ist es wirklich nur eine Frage der Grammatik zu diesem Zeitpunkt. Wie würden Sie dies in einem Frontend Framework/Backend MVC Framework tun, mit dem Sie vertraut sind? Ich stelle mir vor, dass mir das zumindest in die richtige Richtung weist. – d00medman

0

Ich fand ein Rubin Juwel Rack CORS Middleware, um das 'Access-control-allow-origin' Header-Problem zu lösen.


Wenn Sie nicht über Ruby Gem verwenden möchten, fügen Sie den folgenden Code in dem Controller (application_controller, other_name_controller)

before_action :allow_cross_domain_access 
after_action :cors_set_access_control_headers 

def allow_cross_domain_access 
    headers['Access-Control-Allow-Origin'] = '*'# http://localhost:9000 
    headers['Access-Control-Allow-Headers'] = 'GET, POST, PUT, DELETE, OPTIONS' 
    headers['Access-Control-Allow-Methods'] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(',') 
    headers['Access-Control-Max-Age'] = '1728000' 
end 
def cors_set_access_control_headers 
     headers['Access-Control-Allow-Origin'] = '*' 
     headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS' 
     headers['Access-Control-Allow-Headers'] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(',') 
     headers['Access-Control-Max-Age'] = "1728000" 
end 
Verwandte Themen