2013-10-29 87 views
3

下面是使用$http的JSONP功能訪問對於AngularJS

var authenticatedUrl = authenticateUrl("http://example.com/getStuff&callback=JSON_CALLBACK"); 
return $http.jsonp(authenticatedUrl).then(function (response) { 
    ... 
} 

的問題是,我的HMAC認證基於與callback=JSON_CALLBACK的URL是創建一個哈希JSONP調用的基本設置JSONP請求中的真實網址,那麼在angular發出實際請求時,URL將更改爲angular.callbacks._0作爲回調參數,這會使我的身份驗證哈希無效。

如何訪問將用於此JSONP請求的真實URL?

從我的研究看來,攔截器是這樣的方式,但我似乎無法找到具有angular.callbacks._0回調的URL的對象。

+0

愚蠢的問題,但是'認證url'是什麼意思? – charlietfl

+0

@charlietfl - HMAC認證。它會根據URL和密鑰生成一個哈希字符串。 – JT703

+0

@charlietfl - 我編輯了問題以闡明我真正想要的內容(真實的請求URL)。 – JT703

回答

0

如果我理解正確,您正在使用類似Hawk - Single URI Authentication;這是你得到一個令牌,你必須附加到URL和令牌是有效的確切的網址。

你有這個問題,它不是每個角度,而是每個jsonp框架應該工作的方式。

我會建議分叉JSONP添加此行爲或手動執行JSONP。

var i = 0; 
function call_endpoint(callback) { 
    i++; 
    var url = "http://example.com/getStuff&callback=callback_" + i; 

    //append the token here, or call your endpoints to fetch the endpoint. 

    window["callback_" + i] = function (data) { 
     delete window["callback_" + i]; 
     callback(data); 
    }; 

    script = document.createElement('script'); 
    script.src = url; 

    var target = document.getElementsByTagName('script')[0] || document.head; 
    target.parentNode.insertBefore(script, target); 
} 
+0

我覺得應該有一些暴露「轉換」url(帶有'angular.callbacks._0'的那個)。我在想jQuery的ajax類似,有一個「beforeSend」選項,我可以訪問該網址。由於轉換後的url沒有公開(我可以找到),因此無法創建適當的身份驗證令牌。 – JT703