我在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)]);
}
});
答案 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标头的值将按以下方式构造:
因此,如果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);
});