ExtJS 4.1或通用Javascript HTTP_授权函数
ExtJS 4.1 or general Javascript HTTP_Authorization Function
当使用curl --basic --user someuser:somepass http://someurl/
发出请求时,它会附加一个标题,如下所示:Authorization: Basic Y2FsaWRvZzpmMDBmM2IwMg==
。这当然是
基本访问身份验证是web浏览器或其他客户端程序在发出请求时提供用户名和密码的一种方法。在传输之前,用户名会附加一个冒号并与密码连接。生成的字符串使用Base64算法进行编码,并在HTTP标头中传输,然后由接收器进行解码,生成冒号分隔的用户名和密码字符串。基本访问身份验证最初由RFC 1945于1996年定义[http://en.wikipedia.org/wiki/Basic_access_authentication][1] [1]:http://en.wikipedia.org/wiki/Basic_access_authentication
我正在寻找一种方法,让我所有的ExtJS 4.1 Ext.data.proxy.Rest代理将其添加到所有请求中。这看起来是一项简单的任务,但我找不到任何文档。顺便说一句,我知道如何通过headers: {'X_MyHeader':'somevalue'}
属性向代理添加头。我只是不知道如何告诉Ext对当前用户名/密码进行全局操作。
我正在寻找一个类似的解决方案,用于将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') };
}
}
});
应该有一些额外的逻辑来处理令牌到期和刷新请求,但你已经明白了!
- Meteor如何接收HTTP请求
- 在我的情况下,如何进行http请求
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- //而不是在src=“”上使用http://"属性
- 我无法使用angularJs($http)访问服务器
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- 如何将PHP get查询转换为Meteor's HTTP.get()
- 如何在带有JQuery的Neo4j 2.2.x中使用事务Cypher HTTP端点和新的REST API身份验证和授权
- 在Http Post上添加授权标头
- 使用 Meteor HTTP 在 Spotify API 上请求access_token时不受支持的授权类型错误
- 事件源中的 HTTP 授权标头(服务器发送的事件)
- 正则表达式提取 http 授权标头
- 将标题授权设置为角度$http发布
- 在localStorage中存储HTTP Basic授权标头是否存在任何安全问题
- 通过HTTP-Safe发送Google+Hybrid服务器端流一次性授权代码
- 从浏览器发送http请求时缺少授权头
- Angularjs:设置http请求头的授权
- 如何用angular.js实现基本的http授权
- 带有HTTP授权的Chrome扩展中的XMLHttpRequest继续在常规页面上发送授权标头
- Node.js HTTP代理和域user:password授权