2017-09-21 6 views
1

Ich habe meine Go Backend mit gorilla/mux und rs/cors eingerichtet. Wenn ich versuche, eine Anfrage mit einem benutzerdefinierten Header (Bearer) zu senden, schlägt es fehl.Golang Preflight Anfrage Fehler

Mein Server-Setup sieht wie folgt aus:

 router := mux.NewRouter().StrictSlash(true) 
router.HandleFunc("/users", GetUsers).Methods("GET") 
router.HandleFunc("/", GetUsers).Methods("GET") 
router.HandleFunc("/tweets", GetTweets).Methods("GET") 
router.HandleFunc("/login", Login).Methods("POST") 
router.HandleFunc("/profile/tweets", ProfileTweets).Methods("GET") 

c := cors.New(cors.Options{ 
    AllowedOrigins: []string{"*"}, 
    AllowedMethods: []string{"GET", "POST", "PATCH"}, 
    AllowedHeaders: []string{"Bearer", "Content_Type"},}) 

handler := c.Handler(router) 
log.Fatal(http.ListenAndServe(":8080", handler)) 

ich verschiedene andere Lösungen versucht haben (wie OPTIONS im Methods Gespräch hinzugefügt Der Endpunkt für die ich die Bearer Token passieren bin versucht, ist die /profile/tweets. Endpunkt.

ich bin nicht sicher, wie mit gorilla/mux und rs/cors in Bezug auf der Zugabe die Preflight-Anfrage fortzusetzen.

Der tatsächliche Fehler, die ich bekomme:

Fetch API nicht geladen http://localhost:8080/profile/tweets kann. Die Antwort Preflight-Anforderung nicht übergeben Zugriffskontrolle überprüfen: Nein 'Access-Control-Allow-Origin' Header ist auf der angeforderten Ressource vorhanden. Herkunft 'http://localhost:4200' ist daher nicht erlaubt Zugriff. Wenn eine undurchsichtige Antwort Ihren Anforderungen entspricht, setzen Sie den Modus der Anfrage auf 'no-cors', um die Ressource mit deaktiviertem CORS zu holen.

Vielen Dank!

+0

Ist es nicht 'Inhalt-Baumuster zur anstelle von 'Content_Type'? –

+0

@ FrançoisP. Das könnte es gewesen sein .. Ich habe es gerade gelöst, ich muss auch hinzufügen "OptionsPassthrough" –

+0

Gut zu wissen :) –

Antwort

2

Ich habe gerade das Problem gelöst. Ich hatte einen Tippfehler in der AllowedHeaders wie @Francois P.

Außerdem wies darauf hin, ich hatte OptionsPassthrough und die OPTIONS Methode hinzufügen, etwa so:

 router.HandleFunc("/profile/tweets", ProfileTweets).Methods("GET","OPTIONS") 

c := cors.New(cors.Options{ 
    AllowedMethods: []string{"GET","POST", "OPTIONS"}, 
    AllowedOrigins: []string{"*"}, 
    AllowCredentials: true, 
    AllowedHeaders: []string{"Content-Type","Bearer","Bearer ","content-type","Origin","Accept"}, 
    OptionsPassthrough: true, 
}) 
+0

Als Akzeptiert markieren? – PieOhPah

+0

@PieOhPah Ich würde aber ich muss noch etwas warten ;-) –

Verwandte Themen