簡體   English   中英

在Vuejs中將HTTP基本身份驗證與Axios一起使用時出現401錯誤

[英]401 error using HTTP basic auth with Axios in Vuejs

我正在開發一個Vuejs應用程序,該應用程序從Apache Solr索引獲取其數據,並且我的應用程序使用Axios與該索引一起建立連接。 但是,已添加HTTP基本身份驗證,並且我無法使身份驗證工作。 Access-Control-Allow-Origin標頭是在服務器上設置的(它在將auth添加到索引之前起作用),因此這不是問題。 我試圖在axios.get()的config對象中使用auth對象,如下所示:

const params = new URLSearchParams()
params.append('fl', 'label,bundle,entity_id,ss_language,url,is_product_slideshow')
  if (this.nodeType) {
    params.append('fq', 'bundle:' + this.nodeType)
  } else {
    params.append('fq', 'bundle:' + '(article OR document OR video OR product_display)')
  }
  params.append('fq', 'ss_language:' + this.language)
  params.append('fq', 'bs_status:' + 1)
  params.append('fq', '-is_field_restricted_to_internal_use:1')
  params.append('fq', '-is_field_restricted_to_author_of_as:1')
  params.append('fq', '-is_field_pp_confidential:1')
  params.append('fq', '-is_field_pp_do_not_show_item_on_t:1')
  params.append('q', qs)
  params.append('sort', 'is_sort asc')
  params.append('wt', 'json')
  params.append('rows', 10)
  params.append('start', queryStartRows)
  axios.get('https://my-solr-url.com/solr/my-solr-index/select', {
    params: params,
    withCredentials: true,
    auth: {
      username: 'myusername',
      password: 'mypassword'
    }
  })
  .then(response => {
    this.results = response.data.response.docs
    var numFound = this.numFound = response.data.response.numFound
    // Calculate last page.
    var numFoundRounded = Math.floor(numFound / 10) * 10
    var numPages = numFoundRounded / 10
    this.lastPage = numPages
  })

我可以從Postman處使查詢正常運行,因此我知道我具有正確的憑據。

從文檔和其他示例可以看出,我做的不錯,但是仍然出現401錯誤。

我還從Drupal站點使用此索引,在那里,用戶ID和密碼作為URL的一部分傳遞:

https://myusername:mypassword@my-solr-url.com/solr/my-solr-index/select?...

但是這種方法在這里也行不通。 為了使身份驗證正常工作,我需要做些什么?

試試下面的代碼:

axios({
    method: 'get',
    url: 'https://my-solr-url.com/solr/my-solr-index/select',
    params: params,
    withCredentials: true,
    headers:{Authorization:'Basic '+BASE64ENCODED(USERNAME+':'+PASSWORD)}
})

您必須提供base64編碼的username +':'+ password進行授權並嘗試。

我遇到了與ExpressJS應用描述的問題相同的問題; 具有auth: {username: 'user', password: 'pass'} Axios在瀏覽器中被401從Axios客戶端拒絕,但從郵遞員處被拒絕200 OK。 您提到您正在設置Access-Control-Allow-Origin ,我能夠通過確保在auth中間件之前執行CORS中間件來解決此問題。 我注意到我的Axios客戶端在導致瀏覽器基於CORS策略阻止的GET請求之前發送了HTTP OPTIONS請求。

對於那些想知道如何根據@Inus的建議手動計算base64編碼的字符串的人,可以使用btoa() JS方法,但是在瀏覽器中,它仍然給我一個401(如預期的那樣),因為它等效於Axios的計算出的授權使用auth屬性時的標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM