2017-05-09 71 views
2

我要授權對HP ALM REST API,我覺得這「應該」的工作,但事實並非如此:對REST API授權拋出一個錯誤:401(無憑據發現請求)

function performSignIn(){ 

let headers = new Headers(); 

headers.append('Content-Type', 'application/json'); 
headers.append('Accept', 'application/json'); 
headers.append('Authorization', 'Basic ' + base64.encode(username + ":" + password)); 

fetch(sign_in, {mode: 'no-cors', method:'POST', headers: headers}) 
    .then(response => response.json()) 
    .then(json => console.log(json)) 
    .catch(error => console.log('Authorization failed : ' + error.message)); 
} 

我有點怪異的錯誤消息:(無憑據發現請求)

這是從HP文檔爲例,使用XMLHttpRequest實現: http://alm-help.saas.hpe.com/de/12.53/api_refs/REST/webframe.htm#signin-out_example.htm

任何想法?我看不出有什麼問題。

非常感謝!

最好的問候, 丹尼爾

回答

2

fetch(…)默認情況下不發送憑據。您需要explicitly specify they should be sent

fetch(sign_in, {credentials: 'include' , method:'POST', headers: headers}) 
    .then(response => response.json()) 
    .then(json => console.log(json)) 
    .catch(error => console.log('Authorization failed : ' + error.message)); 
} 

另外,順便說一句,你絕對不希望指定mode: 'no-cors'。其效果是告訴瀏覽器,阻止我的前端JavaScript訪問此請求的響應。

-1

謝謝,這似乎工作!但關於'no-cors',我收到以下錯誤消息:

對預檢請求的響應未通過訪問控制檢查:請求的資源上沒有「Access-Control-Allow-Origin」標頭。因此不允許訪問原產地'http://127.0.0.1:3000'。響應的HTTP狀態碼爲501.如果一個不透明的響應滿足您的需求,請將請求的模式設置爲'no-cors',以取消禁用CORS的資源。

我認爲'不可思議'會有所幫助,但實際上並非如此。

+0

乾杯 - 你應該爲此打開另一個問題,而不是發佈它的答案。但是現在讓你知道:501表示服務器端出現故障,對吧?因此,首先查看服務器端日誌,找出服務器端發生故障的原因,以及爲什麼。但無論如何,對於錯誤響應,許多或大多數Web服務器都不會發送Access-Control-Allow-Origin標頭 - 相反,它們只會發送成功響應。因此,501響應中缺少Access-Control-Allow-Origin響應頭並不表示服務器CORS配置錯誤。真正的問題是501本身。 – sideshowbarker

相關問題