2017-05-29 66 views
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;

+0

在'getAllDefectsFromAlm'中使用'mode:'no-cors''和'GET'請求會導致瀏覽器阻止您的代碼訪問響應。所以你的'.then(response => response.json())'不會工作。在'performSignIn'中你的'POST'請求​​也一樣; '.then(response => response.json())'也會在那裏失敗 - 'POST'請求本身會成功,但是你的瀏覽器不會讓你的代碼訪問響應。 – sideshowbarker

+0

實際上,在'performSignIn'' POST'請求​​中設置'mode:'no-cors''的另一個作用是,您的瀏覽器不會讓您向該請求添加任何非CORS安全列表請求標頭的請求標頭https://fetch.spec.whatwg.org/#cors-safelisted-request-header。因此POST請求在沒有您要添加的'Authorization'請求標頭的情況下發送,並且也沒有您想要添加的'Content-Type:application/json'。所以我想'POST'請求​​會失敗授權,即使它不需要授權也不會以正確的內容類型發送。 – sideshowbarker

+0

好吧,註釋掉非Cors導致501 - 但我不會彈出來了... ... –

回答

0

我總是指從HP的REST API手冊,特別是對你的版本:

http://alm-help.saas.hp.com/en/12.50/api_refs/REST/#sign_in.htm

在特別請檢查您的標題。您不需要上面報告的一些參數。

然後嘗試爲再次登錄,你應該能夠得到無彈出的界面上來訪問;)

我有同樣長的時間回來QC 11.52版;)有認證用POST根據/身份驗證點/身份驗證

因此,請檢查您的情況哪些是正確的ulr和參數/頭將被使用。

希望這對你有所幫助。祝你今天愉快!