【发布时间】:2014-09-06 04:20:20
【问题描述】:
这篇 SO 帖子 (Adding headers after RESTAdapter initialization) 是我编写代码的指南:
我的 auth REST 成功返回了一个令牌。我直接使用 AJAX 而不是通过 ember-data 因为这只是登录并获取授权令牌(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 网络信息和登录后受保护的主页。打印授权令牌。 (这只是我的 EMBER 应用学习和测试)
正如您在 AJAX 代码中看到的,这是每次用户登录时要动态放入 RESTAdapter 标头的身份验证令牌的属性设置
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
更新
在测试了各种组合后仍然失败,我放弃了,只使用了最简单的 hack,ajaxPrefiler 哈哈。至少它有效:
if (response.success) {
Ember.$.ajaxPrefilter(function( options, oriOptions, jqXHR ) {
jqXHR.setRequestHeader("AUTH-TOKEN", response.token);
});
self.transitionToRoute('/');
}
【问题讨论】:
标签: ember.js ember-data