正如@gerry3 所说$.ajaxPrefilter
,这是一个有效的解决方案。
但是,如果您想解决在事件之后动态更改标题的问题,例如,成功的 LOGIN 尝试,那么您需要放置更多连线。在我的情况下,我需要在成功的 AJAX 登录后发回服务器提供的“令牌”标头。但是,当然,当用户启动应用程序时,他还没有登录。
问题是,一旦您重新打开或扩展RESTAdapter,或定义一个ajaxPrefilter,即使您将其绑定到一个值(或在我的情况下为 localStorage),该类也不会遵循当前变量 value。这就像在某个时刻拍摄的快照。所以在我的场景中它是没用的。
我正在关注Embercast 客户端身份验证,这是一个好的开始(代码可用),但我使用的是Ember-Data而不是 jQuery 数据获取。
所以诀窍是观察令牌并根据需要多次重新定义 ajaxPrefilter。
tokenChanged: function() {
this.get('token')=='' ?
localStorage.removeItem('token') :
localStorage.token = this.get('token');
$.ajaxPrefilter(function(options, originalOptions, xhr) {
return xhr.setRequestHeader('Token', localStorage.token);
});
}.observes('token')
因此,当用户登录时,他将拥有一个有效的令牌,并在每个请求中通过 RESTAdapter 将其发送到服务器。
希望这可以帮助某人。