2013-08-31 89 views
1

我有一個AngularJS網絡應用程序,我正在使用基本身份驗證。這很好,但是當用戶輸入錯誤的電子郵件或密碼時,我想給他們一個很好的錯誤信息。因此,我將返回401的原因解釋如下:http://leastprivilege.com/2013/04/22/web-api-security-basic-authentication-with-thinktecture-identitymodel-authenticationhandler/使用ReasonPhrase處理401

這可以正常工作,並且帶有reasonphrases的401會正確返回。但是,使用Angular的$ http解釋狀態碼爲0而不是401的響應,此外沒有機會讀取我想傳遞給我的用戶的原因。例如。未知電子郵件或密碼錯誤。

我已經在Chrome和Firefox中測試過這個版本,並且一直在瀏覽大量的問題而沒有找到任何答案。我已經實現了一個響應攔截這樣的:

$httpProvider.responseInterceptors.push(function ($timeout, $q) { 
     return function (promise) { 
      return promise.then(function (successResponse) { 
       if (successResponse.config.method.toUpperCase() != 'GET') 
        showMessage('Success', 'successMessage', 5000); 
       return successResponse; 

      }, function (errorResponse) { 
       console.log("status: " + errorResponse.status, errorResponse.config); 
       switch (errorResponse.status) { 
        case 0: 
        case 401: 
         showMessage('Wrong email or password', 'errorMessage', 20000); 
         break; 
        case 403: 
         showMessage('You don\'t have the right to do this', 'errorMessage', 20000); 
         break; 
        case 500: 
         showMessage('Server internal error: ' + errorResponse.data, 'errorMessage', 20000); 
         break; 
        default: 
         showMessage('Error ' + errorResponse.status + ': ' + errorResponse.data, 'errorMessage', 20000); 
       } 
       return $q.reject(errorResponse); 
      }); 
     }; 
    }); 

在調試攔截器的工作原理,但狀態代碼是從來沒有401,但不是0。在Chrome控制檯中,它顯示:

XMLHttpRequest cannot load http://localhost:64044/api/user/login/. Origin  
http://localhost:63546 is not allowed by Access-Control-Allow-Origin. 

有沒有可能讓我這個工作?

回答

0

這裏的問題是,你正在向不同的服務器發送請求,而不是託管JavaScript的服務器。你將不得不使用jsonp來解決這個錯誤信息。

相關問題