在AngularJS中访问JSONP请求的真实URL

时间:2013-10-29 19:01:17

标签: angularjs authentication jsonp cors interceptor

以下是使用$http的JSONP函数进行JSONP调用的基本设置

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

问题是,我的HMAC身份验证器正在使用callback=JSON_CALLBACK创建基于url的哈希值,然后在angular发出实际请求时,URL会更改为angular.callbacks._0作为回调参数,这使我的身份验证哈希无效。

如何访问将用于此JSONP请求的真实网址?

从我的研究中看来,拦截器似乎是这样的,但我似乎找不到具有angular.callbacks._0回调的URL的对象。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您使用的是Hawk - Single URI Authentication;这是你得到一个你必须附加到网址的令牌,而令牌对于那个确切的网址是有效的。

你遇到的问题,不是角度本身,而是每个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);
}