0

我想傳入用於對REST調用api所需的用戶名和密碼組合。REST的簡單身份驗證使用角度服務的請求攔截器獲取調用

Controller.js

var app = angular.module('myApp', []); 

//The service to put the interceptor configuration on (not on all $http method calls) 
app.factory('getCallsApi', ['$http', function($http) { 
    return { 
     get: function(callback) { 
      $http.get(/* REST URI */).success(function(data) { 
       callback(data); 
      }); 
     } 
    } 
}]); 

var Interceptor = function($q) { 
    return { 
     request: function(config) { 
      //TODO: Pass in username and password (hardcoded) to get through authentication 

     }, 
     requestError: function(rejection) { 

     }, 
     response: function(config) { 
      //TODO: ADD Cross origin headers 

     }, 
     responseError: function(rejection) { 

     } 
    } 
} 

app.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(Interceptor); 
}]); 

myApp.controller('appController', ['$scope','getCallsApi', function($scope, getCallsApi) { 
    getCallsApi.get(function(data) { 
    console.log(data); 
    }); 
}]); 

我目前收到在控制檯的兩個錯誤。首先是未授權訪問的401狀態,以及有關在請求的資源上找不到交叉源標題的錯誤。我無法將X origin標頭放在請求的資源上,因爲我沒有權限編輯該API的響應。

+1

如果要查詢對服務器不允許跨起源,和你沒有控制服務器來添加標題,那麼***控制服務器的人需要爲你做。沒有辦法繞過這個安全功能。 – Claies

+0

是的,我知道這是一個很長的截獲反應,然後添加標題。但無論如何,如何通過服務調用的請求攔截器來通過401? –

回答

0

對於交叉來源問題,不會說話,但這裏是如何向請求標頭添加內容。在我的情況下,我傳入存儲在localstorage中的令牌。我們認爲值綁定到一個角度不變,並將它注入到攔截器服務:

.constant('AUTH_TOKEN', localStorage.getItem('myapp.authToken')) 

而且在你的攔截器:

var Interceptor = function ($q) { 
     return { 
      request: function (config) { 

       if (AUTH_TOKEN) { 
        config.headers['Authorization'] = 'Token ' + AUTH_TOKEN; 
       } 
       return config; 
      } 
     } 
    } 
+0

謝謝。但是我對Angular來說相當陌生,我不確定如何使用這個常量(通過推入用戶名和密碼的組合)來驗證我對api的請求。我試圖使這個常量 - {'username':xxxx,'password':xxxxx},但它不起作用,我仍然得到了一個401. –

+0

常數只是一個例子。你可能不應該在頭文件中傳遞用戶名和密碼,而是作爲登錄請求的主體。你試圖打什麼?它是你的嗎?你知道誰是誰?有文件嗎?我從來沒有聽說過需要用戶名和密碼作爲請求標題的一部分的api。你應該對它的工作方式做更多的研究。 – jakeed1

+0

我知道,它不是一個好主意傳遞在頭中的用戶名和密碼,但我正在尋找一種方式來通過身份驗證,而不會彈出窗體的用戶通過提供一對有效的代碼,以便它被使用每次打電話都要進行身份驗證。它是一個私人API,我不是所有者,雖然可能有文檔。每當我嘗試獲取一些數據時,它會彈出一個警告對話框,提供用戶名和密碼(確實有一個有效的對話框)。 –

相關問題