我的授权系统与 Ember Data 完美配合。使用adapater.ajax()
代替$.ajax
,我的所有余烬数据调用都使用正确的令牌进行签名。但是,我有一个案例,我正在使用第三方上传库,它使用自己的XHR请求(jquery.fileapi)。这个库为它发出的请求公开了一个“headers”属性,但是我不知道最好的方法是从我的适配器中取出标题并将它传递给我正在构建的文件上传组件。
ApplicationAdapter :
export default DS.ActiveModelAdapter.extend({
namespace: 'api/v1',
headers: function() {
var authToken = this.get('session.authToken') || 'None';
return {
'Authorization': Ember.String.fmt('Bearer %@', authToken)
};
}.property('session.authToken')
});
ImageUploadComponent :
didInsertElement: function() {
this.$('.js-uploader').fileapi({
url: '/api/v1/users/avatar',
accept: 'image/*',
headers: {'?????????????'}
});
}
当'session.authToken'发生变化时,我宁愿不在“标题”中定义全局。
答案 0 :(得分:0)
这就是我现在正在做的事情。会喜欢其他解决方案。
DS.Store.reopen({
apiPathFor: function() {
var url = arguments.length ? Array.prototype.slice.call(arguments).join('/') : ''
, adapter = this.adapterFor('application');
return [adapter.urlPrefix(), url].join('/');
}
});
export default Ember.Component.extend({
endpoint: null,
store: Ember.computed.readOnly('targetObject.store'),
didInsertElement: function() {
var store = this.get('store')
, adapter = store.adapterFor('application')
, headers = adapter.get('headers')
, url = store.apiPathFor(this.get('endpoint'));
var args = {
url: url,
headers: headers,
accept: 'image/*'
};
this.$('.js-fileapi').fileapi(args);
},
});