0
我想對HP Alm進行身份驗證,但是在瀏覽器中運行代碼時,會彈出一個彈出窗口,提示我手動登錄。該操作非常有效,可以隨後發送請求好。HP ALM 12:53 - 避免登錄表單進行身份驗證
但是,我該如何避免這種情況?我希望它在沒有瀏覽器登錄表單的情況下進行驗證。有任何想法嗎?謝謝!
最好的問候, 丹尼爾
import utf8 from 'utf8';
import base64 from 'base-64';
class AlmApi {
static getAllDefectsFromAlm() {
performSignIn();
headers.append('Accept', 'application/json');
return fetch(request, {
method: 'GET',
mode: 'no-cors',
credentials: 'include',
headers: headers
})
.then(response => response.json())
.catch(error => console.log('Getting data failed: ' + error.message));
}
}
let alm_host = '<URL><PORT>/qcbin';
let sign_in = alm_host + '/api/authentication/sign-in';
let sign_out = alm_host + '/api/authentication/sign-out';
let request = alm_host + '/rest/domains/<DOMAIN>/projects/<PROJECT>?<QUERY>';
let username = 'USERNAME';
let password = 'PASSWORD';
let login_credentials = username + ':' + password;
let bytes = utf8.encode(login_credentials);
let headers = new Headers();
function performSignIn() {
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
headers.append('Authorization', 'Basic' + base64.encode(bytes));
fetch(sign_in, {
credentials: 'include',
method: 'POST',
headers: headers,
mode: 'no-cors'
})
.then(response => response.json())
.catch(error => console.log('Authorization failed : ' + error.message));
}
function performSignOut() {
headers.append('Accept', 'application/json');
fetch(sign_in, {
method: 'POST',
headers: headers
})
.catch(error => console.log('Logout failed: ' + error.message));
}
export default AlmApi;
在'getAllDefectsFromAlm'中使用'mode:'no-cors''和'GET'請求會導致瀏覽器阻止您的代碼訪問響應。所以你的'.then(response => response.json())'不會工作。在'performSignIn'中你的'POST'請求也一樣; '.then(response => response.json())'也會在那裏失敗 - 'POST'請求本身會成功,但是你的瀏覽器不會讓你的代碼訪問響應。 – sideshowbarker
實際上,在'performSignIn'' POST'請求中設置'mode:'no-cors''的另一個作用是,您的瀏覽器不會讓您向該請求添加任何非CORS安全列表請求標頭的請求標頭https://fetch.spec.whatwg.org/#cors-safelisted-request-header。因此POST請求在沒有您要添加的'Authorization'請求標頭的情況下發送,並且也沒有您想要添加的'Content-Type:application/json'。所以我想'POST'請求會失敗授權,即使它不需要授權也不會以正確的內容類型發送。 – sideshowbarker
好吧,註釋掉非Cors導致501 - 但我不會彈出來了... ... –