CORS授权聚合物和goapp golang

时间:2017-05-21 23:28:02

标签: google-app-engine go cors polymer

我有聚合物前端与goapp服务器交互。只要我没有在标题中传递授权令牌,一切正常。这是Polymer side的代码

<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};
      }

在golang服务器端

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
}

请注意我删除了标题=&#34; [[_ computeHeader()]]&#34;从聚合物代码然后它工作..但是使用授权令牌它会引发跟随错误。

  

XMLHttpRequest无法加载http://localhost:8081。响应   预检请求没有通过访问控制检查:否   &#39;访问控制允许来源&#39;标题出现在请求的上   资源。起源&#39; {{3}}&#39;因此是不允许的   访问。

请帮忙

1 个答案:

答案 0 :(得分:2)

解决了问题..

为选项创建新路线

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")

}

但是我不确定,为什么这个有效?