在我的Emberjs应用程序中,我有一个Employee模型,我应该通过REST Get API调用加载,我必须首先验证API以获取令牌,然后开始加载数据,我知道如何使用JQuery轻松完成此操作不知道如何在EmberJS中实现这一点,所以如果有人能指导我如何这样做,我将非常感激。
以下是我用于身份验证,提取员工数据以及我的EmberJS模型代码的JQuery代码
由于
验证
$.ajax ({ type: "POST", url: "http://portal.domainname.com/auth", dataType: 'json', async: false, data: JSON.stringify({ Login: "logmein@email.com", Password : "test" }), success: function(data) { console.log(data); //Here I get the token needed for further calls... }, error: function(xhr, error){ console.debug(xhr); console.debug(error); } });
要求加载员工数据:
$.ajax ({ type: "GET", url: "http://portal.domainname.com/employees", dataType: 'json', async: false, beforeSend: function (xhr) { xhr.setRequestHeader ("Token", "0000000-0000-0000-0000-00000000"); }, success: function(data) { console.log(data); }, error: function(xhr, error){ console.debug(xhr); console.debug(error); } });
EmberJS模特
App.Store = DS.Store.extend({
revision: 11
});
App.Employee = DS.Model.extend({
employeeID: DS.attr('string'),
employeeName: DS.attr('string')
});
App.Store.reopen({
adapter: 'DS.RESTAdapter'
});
答案 0 :(得分:3)
您可以向所有Ember AJAX请求添加标题,如下所示:
App.Store = DS.Store.extend({
revision: 13,
adapter: DS.RESTAdapter.extend({
ajax: function(url, type, hash) {
if (!hash) {
hash = {};
}
hash.beforeSend = function(xhr) {
xhr.setRequestHeader("Authorization", "Token " + window.sessionToken);
};
return this._super(url, type, hash);
}
})
});
我在生产中使用此代码。
答案 1 :(得分:1)
一个非常真实的&可行的解决方案是避免使用EmberData,只需按照您已知的方式使用ajax。从Discourse的创始人(使用Ember而不使用Ember数据)看一下本教程:
答案 2 :(得分:0)
作为一个黑客,您可以使用类似https://api.jquery.com/jQuery.ajaxPrefilter/之类的东西来为每个调用添加带有令牌的标头。但是,我认为您应该使用专用的auth库。
此外,您的商店有修订版:11 - 这是我认为的旧版本。
答案 3 :(得分:0)
尝试这样的事情:
App.ApplicationAdapter = DS.RESTAdapter.extend({
setHeaders: function() {
this.set('headers', { "Token": "0000000-0000-0000-0000-00000000" });
}.on('init');
});
我认为你需要使用ember-data-1.0.0-beta.x才能正常工作。