2017-06-12 8 views
0

我正在开发一个API,在Go和我的前端Angular(没有AngularJS),但是当我从Angular的Web应用程序调用我的API时,在后端看不到我的标头,特殊情况下我的授权标题,因为我的API具有基于JWT的身份验证。标题http没有传递到我的API

另外我想提及的是,我使用Postman和Go Request客户端来测试我的应用程序,并且我的API在我的API中交付时没有任何问题。

下面附加的是我后端的CORS和来自我的前端的API调用。

我的后端:

func Cors() gin.HandlerFunc { 
    log.Println("CORS Middleware") 
    return func(c *gin.Context) { 
     c.Writer.Header().Add("Access-Control-Allow-Origin", "*") 
     c.Next() 
    } 
} 

我的前端:

getData() { 

const auth = `Bearer ${this.token}`; 

const headers = new Headers({ 
    'Access-Control-Allow-Origin': '*', 
    'Accept': 'application/json', 
    'Authorization': auth, 
}); 

const options = new RequestOptions(headers); 

console.log(headers); //Here I can see 

const products = this.http.get('localhost:8000/api/products', options) 
       .subscribe((response: Response) => { 
        this.data = response.json(); 
       }); 
return products; 
} 

感谢和我的英语很抱歉,我认为我的CORS会引起问题。

+0

这可能是不相关的,但你需要的“授权”年底将逗号:AUTH, – SolidSnake

回答

0

而不是

const options = new RequestOptions(headers); 

务必:

const options = new RequestOptions({ headers: headers }); 

constructor for RequestOptions需要RequestOptionsArgs,而不是一个Headers


此外,它似乎你不是很了解CORS。您并不需要从前端向后端发送任何标题(当浏览器发现它是CORS请求时,浏览器会自动添加所需内容)。这些头文件(Access-Control-Allow-Origin)只能由服务器发送。

对于后端,这里是一个改进的建议(应处理大多数情况下):

func Cors() gin.HandlerFunc { 
    log.Println("CORS Middleware") 
    return func(c *gin.Context) { 
     c.Writer.Header().Set("Access-Control-Allow-Origin", "*") 
     c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE") 
     c.Writer.Header().Set("Access-Control-Allow-Headers", "Origin, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization") 
     c.Writer.Header().Set("Access-Control-Expose-Headers", "Content-Length") 
     c.Writer.Header().Set("Access-Control-Allow-Credentials", "true") 
     c.Writer.Header().Set("Access-Control-Max-Age", "86400") 
     // c.Writer.Header().Set("Content-Type", "application/json") // uncomment if needed 

     if c.Request.Method == "OPTIONS" { 
      fmt.Println("OPTIONS") 
      c.AbortWithStatus(200) 
     } else { 
      c.Next() 
     } 
    } 
} 
+0

感谢兄弟,我的问题几乎解决了,现在我的授权标头设法在开始和结束时得到以下标志。 我附加了Postman的请求和Web应用的请求。 斜网APP 承载 “\” eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTk2MTUyMTAsImlhdCI6MTQ5NzAyMzIxMCwibWFpbCI6InNlbGxlciJ9.nFV5JwB5lcN3e8CuMbNNx9Y6n1tW4oBT-5Eh8H5-YQ4 \ “” 邮差 承载eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTkzODIzMjksImlhdCI6MTQ5Njc5MDMyOSwibWFpbCI6ImFkbWluIn0.v3GSiAIq6Bs5w3NPfjWT1kJF2Wv6zRrkSQY7hVDe7qQ – fabulias

+0

你是什么意思?目前的问题究竟是什么? – acdcjunior

+0

当我建立我的头授权在角我看终端的承载,但是当我看到我的头在后端(去)出现这个字符“\”,\“”,我不会继续:( – fabulias

相关问题