実際の Web サーバーが表示されず、AJAX 経由で Yelp API と対話するローカル プロジェクトにバックボーンを使用しようとしています。Yelp API では、認証に oauth を使用する必要があり、独自のコードをモデル化したサンプル コードが提供されます。サンプルコードを使用すると、Cross-Origin などで問題が発生することはありません。ただし、ブラウザーのセキュリティ オプションをオフにすると、エラーに対して 400 応答が返されます。
次のようにフェッチメソッドを上書きしようとしました:
fetch: function(options) {
var accessor, message, parameterMap, parameters;
if (!options) {
options = {};
}
accessor = {
consumerSecret: LOAF.auth.conserumerSecret,
tokenSecret: LOAF.auth.accessTokenSecret
};
parameters = [];
parameters.push(['oauth_consumer_key', LOAF.auth.consumerKey]);
parameters.push(['oauth_consumer_secret', LOAF.auth.consumerSecret]);
parameters.push(['oauth_token', LOAF.auth.accessToken]);
parameters.push(['oauth_signature_method', 'HMAC-SHA1']);
parameters.push(['location', "New York City"]);
message = {
'action': this.url,
'method': 'GET',
'parameters': parameters
};
OAuth.setTimestampAndNonce(message);
OAuth.SignatureMethod.sign(message, accessor);
parameterMap = OAuth.getParameterMap(message.parameters);
parameterMap.oauth_signature = OAuth.percentEncode(parameterMap.oauth_signature);
options.url = this.url;
options.data = parameterMap;
options.cache = true;
options.dataType = 'json';
options.success = this.onResponse;
console.log("Attempting");
console.log(options);
return Backbone.Model.prototype.fetch.apply(this, options);
},
しかし、これは 400 応答を生成します。バックボーンがほとんどのことを行っており、設定しているオプションの一部を上書きしている可能性があるため、AJAX 呼び出しを適切に行っていないためだと感じています。私がする必要があるのは、OAuth を処理して自分で応答を解析する代わりに、このコレクションの「同期」メソッドを上書きすることだと思います。これを行うより良い方法はありますか?