2017-05-21 11 views
2

私はgoappサーバーと相互作用するポリマーフロントエンドを持っています。ヘッダーに認証トークンを渡さない限り、すべて正常に動作します。ここでは、ポリマー側のコードgolangサーバ側CORS認可ポリマーとgoappゴーラン

w.Header().Set("Access-Control-Allow-Credentials", "true") 
if origin := r.Header.Get("Origin"); origin != "" { 
    w.Header().Set("Access-Control-Allow-Origin", origin) 
} 
w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization") 

if r.Method == "OPTIONS" { 
    return 
} 

<iron-ajax 
     auto 
     url="http://localhost:8080/ephomenotes" 
     handle-as="json" 
     last-response="{{response}}" 
     headers="[[_computeHeader()]]" 
     debounce-duration="300"></iron-ajax> 

_computeHeader() { 
     var token = localStorage.getItem("savedToken"); 
     var obj = {}; 
     obj.Authorization = "Bearer " + token; 
     return obj; 
     //return {"Authorization": "Bearer " + token}; 
     } 

注意してください、私は、ヘッダーに= "[[_ computeHeader()]]" ポリマーコードから、それを削除されているworks..However Authorizationトークンを使用すると、次のエラーが発生します。

XMLHttpRequestはhttp://localhost:8080/ephomenotesをロードできません。応答 要求をプリフライトするとアクセス制御チェックを通過しません。いいえ 要求された リソースに 'Access-Control-Allow-Origin'ヘッダーが存在します。したがって、オリジン 'http://localhost:8081'は許可されません。

答えて

1

が問題を解決助けてくださいが...

これは新しい機能である

r.OPTIONS("/ephomenotes", optionsheader) 
r.GET("/ephomenotes", env.EPHomePage) 

オプションのための新しいルートを作成しました。

func optionsheader(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { 

    w.Header().Set("Access-Control-Allow-Credentials", "true") 
    if origin := r.Header.Get("Origin"); origin != "" { 
     w.Header().Set("Access-Control-Allow-Origin", origin) 
    } 
    w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization") 
    // w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE") 

} 

しかし、私はこれがなぜ機能するのかわかりません。

関連する問題