使用Extjs存储进行基本身份验证

时间:2019-08-30 08:08:54

标签: javascript extjs jsonp basic-authentication sencha-architect

我在ExtJS中有以下存储,我需要发送带有此请求的身份验证标头以进行基本身份验证。可以这样做吗?

Ext.define('MyApp.store.DataGridModels', {
    extend: 'Ext.data.Store',
    alias: 'store.datagridmodels',

    requires: [
        'MyApp.model.DataGridModel',
        'Ext.data.proxy.JsonP'
    ],

    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            storeId: 'DataGridModels',
            autoLoad: true,
            model: 'MyApp.model.DataGridModel',
            proxy: {
                type: 'jsonp',
                url: 'http://example.com/data.php'
            }
        }, cfg)]);
    }
});

1 个答案:

答案 0 :(得分:0)

在我的应用程序init函数中,我这样做:

Ext.Ajax.on('beforerequest', function (conn , options , eOpts) {

    // Get a token from the internal storage.
    // We have gotten it during the authentication procedure.
    var token = window.localStorage.authToken;
    if (!token) return;

    options.headers = options.headers ? {};
    options.headers.Authorization = 'Bearer ' + token);
    // Usually I use lodash code:
    // _.set(options, ['headers', 'Authorization'], 'Bearer ' + token)
});

它将修改每个带有授权标头的Ajax请求。

如果使用“基本”身份验证方案,则Authorization标头的值将按以下方式构造:

  1. 用户名和密码用冒号(username:password)组合。
  2. 结果字符串是base64编码的(dXNlcm5hbWU6cGFzc3dvcmQ =)。

因此,如果base64字符串是之前计算的并保存在window.localStorage.baseAuthenticationToken中,则代码将如下所示:

Ext.Ajax.on('beforerequest', function (conn , options , eOpts) {
    var token = window.localStorage.baseAuthenticationToken;
    if (!token) return;
    options.headers = options.headers ? {};
    options.headers.Authorization = 'Basic ' + token);
});