我正在寻找一种类似的解决方案,将 OAuth 令牌应用于我的 Ext.data.proxy.Rest 代理,但找不到任何有关它的信息。非常震惊,没有关于如何做到这一点的信息。让我觉得我走错了路。无论如何,这就是我想出的实现这一目标的方法。
覆盖Ext.data.proxy.Ajax
并保留一个静态变量,使其适用于所有代理。然后将设置的 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') };
}
}
});
应该有一些额外的逻辑来处理令牌过期和刷新请求,但你明白了!