所以this question有been asked几个times,但我相信我终于明白了这里出了什么问题。我正在使用带有Angular的Yelp API,这需要OAuth 1.0a才能访问。像大多数人一样,我使用following code:
'angular.callbacks._0'

使用JSON_CALLBACK
作为回调使它第一次工作,因为它强制它使用第一个回调,但是会中断后续请求。 You are actually supposed to use JSON_CALLBACK
正确增加回调,但会破坏所有内容。 Yelp生成的错误是"无效的签名"。我相信这是由Angular在已经编码之后直到之后才取代if
引起的,从而导致预期签名与实际签名不同。我正在使用this签名生成器。
我如何解决这个问题,确保Angular正确地增加回调,同时确保正确的签名生成?
答案 0 :(得分:0)
我找到一种解决问题的丑陋方式。在下面的文章中,有一个描述如何创建自己的拦截器来增加jsonp回调参数(angular.callbacks._0,angular.callbacks._1等)
how to custom set angularjs jsonp callback name?
这个解决方案一对一在我的情况下不起作用。使用yelp和查询,你必须创建一个oauth签名,param回调应该分别包含在签名中,然后应该在执行jsonp请求之前增加。
所以,在我的服务中,在进行签名之前和执行jsonp请求之前,我只是调用计数器来生成新的增量。
在您的情况下,我会建议更改您的代码,如下所示:
var retrieveYelp = function (name, callback) {
// GENERATE increment and use it in the params
var callbackId = angular.callbacks.counter.toString(36);
var method = 'GET';
var url = 'http://api.yelp.com/v2/search';
var params = {
callback: 'angular.callbacks._' + callbackId,
ll: /* hidden */,
radius_filter: '3219',
oauth_consumer_key: /* hidden */, // consumer key
oauth_token: /* hidden */, //Token
oauth_signature_method: 'HMAC-SHA1',
oauth_timestamp: new Date().getTime(),
oauth_nonce: randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'),
term: name || 'food',
actionlinks: true
};
我发现解决方案不是超级决定,我同意,但那么至少它起作用并且似乎没有副作用。