使用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并保留静态变量,以便将其应用于所有代理。然后将设置的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') };
        }
    }
});


那里应该有一些额外的逻辑来处理令牌到期和刷新请求,但是您明白了!

关于javascript - ExtJS 4.1或常规Javascript HTTP_Authorization函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11802970/

10-13 04:49