这篇SO帖子(Adding headers after RESTAdapter initialization)是我编写代码的指南:
我的auth REST成功返回一个令牌。我直接使用AJAX而不是通过ember-data coz这只是登录并获得授权令牌(在embercast指南)
$.ajax({
type: 'POST',
contentType: 'application/json',
url: 'api/auth',
dataType: "json",
data: postData,
success: function(response){
self.set('errorMessage', response.message);
if (response.success) {
self.set('token', response.token);
self.set('loginstatus', 'success');
var appController = self.get('controllers.application');
appController.set('token', response.token);
App.set('authToken', response.token);
self.transitionToRoute('/');
}
if (response.message) {
//console.log('login failed');
//THIS CODE IS FAILED!!!
//self.get('login').render("login-modal-failed", {
// into: 'application',
// outlet: 'modal'
//});
}
},
error: function() {
alert("An error occurred while processing JSON file.");
}
});
登录后,这是Chrome网络信息和受保护的HOME页面。打印授权令牌。 (这只是我的EMBER APP学习和测试)
正如您在AJAX代码中看到的,以下是每次用户登录时动态放入RESTAdapter标头的auth令牌的属性设置
App.set('authToken', response.token);
这是RESTAdapter代码:
App.ApplicationAdapter = DS.RESTAdapter.extend({
namespace: 'emberauthslimv3/api',
headers: {
'AUTH-TOKEN': function() {
return {
token : this.get('App.authToken') || localStorage.getItem('token')
}
}.property('App.authToken')
}
});
我已经尝试了各种标题设置的组合,相信我,我现在这样做了大约2天,并且永远不会成功地将标记放入标题中。
当我查看chrome网络信息时,我得到的标题就是这个
AUTH-TOKEN:[object Object]
感谢任何帮助/指示:D
更新
在测试了各种组合并仍然失败后,我放弃并使用最简单的黑客,ajaxPrefiler哈哈。至少它有效:
if (response.success) {
Ember.$.ajaxPrefilter(function( options, oriOptions, jqXHR ) {
jqXHR.setRequestHeader("AUTH-TOKEN", response.token);
});
self.transitionToRoute('/');
}
答案 0 :(得分:4)
首先,当您拥有Ember文档时,您已经使用了错误的参考链接。问题是ApplicationAdapter中的头实现。您将返回包含每个标头属性的对象。
App.ApplicationAdapter = DS.RESTAdapter.extend({
headers: function() {
return {
"AUTH-TOKEN": Ember.get('App.authToken') || localStorage.getItem('token')
};
}.property().volatile()
});
BTW这里是链接。 http://emberjs.com/api/data/classes/DS.RESTAdapter.html#toc_headers-customization