OAuth トークンを Ext.data.proxy.Rest プロキシに適用するための同様のソリューションを探していましたが、それに関する情報が見つかりませんでした。これを行う方法について何もないことに非常にショックを受けました。やり方が間違っていると思わせてくれます。とにかく、これを達成するために私が思いついたものはここにあります。
Ext.data.proxy.Ajax
すべてのプロキシに適用されるように、静的変数をオーバーライドして保持します。次に、set authHeader を現在のヘッダーのリストとマージして、プロキシごとにカスタマイズできるようにします。
Ext.override(Ext.data.proxy.Ajax, {
statics: {
authHeader: undefined,
},
/**
* @cfg {Object} headers
* Any headers to add to the Ajax request. Defaults to undefined.
*/
doRequest: function(operation, callback, scope) {
var writer = this.getWriter(),
request = this.buildRequest(operation, callback, scope);
if (operation.allowWrite()) {
request = writer.write(request);
}
console.log(this.headers);
Ext.apply(request, {
headers : Ext.apply(this.headers, Ext.data.proxy.Ajax.authHeader) || Ext.data.proxy.Ajax.authHeader,
timeout : this.timeout,
scope : this,
callback : this.createRequestCallback(request, operation, callback, scope),
method : this.getMethod(request),
disableCaching: false // explicitly set it to false, ServerProxy handles caching
});
Ext.Ajax.request(request);
return request;
}
});
次に、ローカル ストレージでトークンを探します。存在する場合はグローバルに設定し、存在しない場合はログインを求めます。
MyApp.model.AuthToken.load(1, {
callback: function(record) {
// If we don't have anything in local storage for the user, show the login box.
if (record.get('access_token') == '') {
var window = Ext.create('MyApp.view.Login');
window.show();
} else {
Ext.data.proxy.Ajax.authHeader = { 'Authorization': 'Bearer ' + record.get('access_token') };
}
}
});
トークンの有効期限と更新要求を処理するための追加のロジックがいくつかあるはずですが、アイデアはわかります!