CORS 授权聚合物和goapp golang
Posted
技术标签:
【中文标题】CORS 授权聚合物和goapp golang【英文标题】:CORS Authorization polymer and goapp golang 【发布时间】:2017-10-21 12:20:53 【问题描述】:我有与 goapp 服务器交互的聚合物前端。只要我不在标头中传递授权令牌,一切正常。这是 Polymer 端的代码
<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
请注意,我从聚合物代码中删除 headers="[[_computeHeader()]]" 然后它可以工作。但是使用授权令牌会引发以下错误。
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")
但我不确定,为什么这个有效?
【讨论】:
以上是关于CORS 授权聚合物和goapp golang的主要内容,如果未能解决你的问题,请参考以下文章
Angular 和 Laravel 授权标头 CORS 错误
如何为 AWS API Gateway 自定义授权方配置 CORS?