我建立一個AngularJS有一個RESTful API(1.2.16)的Web應用程序,我要寄401級未授權的響應,其中認證信息是無效的或不存在請求不HTTP基本驗證對話框。當我這樣做時,即使使用HTTP攔截器,當通過AngularJS發出AJAX請求時,我也會看到瀏覽器提供的基本「需要身份驗證」對話框。我的攔截器在之後運行那個對話框,這對於做一些有用的事來說已經太晚了。使用AngularJS攔截
一個具體的例子:
我的後端API返回401 /api/things
除非授權令牌存在。很好很簡單。
在AngularJS應用程序方面,我已經在config
塊看了看docs,並設置了一個攔截器是這樣的:
$httpProvider.interceptors.push(['$q', function ($q) {
return {
'responseError': function (rejection) {
if (rejection.status === 401) {
console.log('Got a 401')
}
return $q.reject(rejection)
}
}
}])
當我打開我的應用程序,除去身份驗證令牌,並執行AJAX調用/api/things
(有希望觸發上述攔截器),我看到:
如果我取消該對話框中,我看到的console.log
輸出「有一個401」,我希望看到的而不是對話:
顯然,攔截器工作正常,但它攔截爲時已晚!
我看到網絡上關於在短短這樣的情況下AngularJS認證無數的帖子,他們似乎都使用HTTP攔截器,但它們都沒有提到基本身份驗證對話框彈出。我對其外觀的一些錯誤想法包括:
- 缺失
Content-Type: application/json
響應標題?不,它在那裏。 - 需要返回承諾拒絕以外的內容嗎?無論返回什麼,該代碼總是在對話框後運行。
我失去了一些設置步驟或使用攔截錯誤?
爲什麼你沒有使用403而不是401? –
我使用了401,因爲在原始問題中,我刪除了身份驗證令牌(在我的情況下爲cookie)。 401是在此使用的正確響應代碼,因爲請求需要身份驗證,並且沒有提供任何身份驗證。 403用於提供身份驗證但服務器拒絕訪問資源。 –