2017-06-12 9 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

相關問題