【发布时间】:2013-04-18 16:08:16
【问题描述】:
在我们的项目中,我们使用骨干网来访问 REST 服务。
此服务提供一个 HTTP 标头,其中包含一种会话令牌以对当前用户进行身份验证。
每次请求都会更改此令牌。
我们将此令牌与我们的登录模型一起使用来确定当前路由是否需要登录。
第一个想法是使用 jQuery.ajaxSuccess。
$(document).ajaxSuccess(function(event, xhr, settings) {
updateToken(xhr);
});
几乎可以工作,但全局成功是在主干中的成功处理程序之后触发的。
因此,如果任何主干成功处理程序向服务器发起新请求,此时它具有旧令牌,请求将被拒绝。
在每个成功处理程序中调用 updateToken 或使用 setTimeout 继续处理非常费力且容易出错。它可能会被遗忘。
现在我们创建了这个解决方案
var BBsync = Backbone.sync;
Backbone.sync = function(method, model, options) {
var success = options.success;
options.success = function(model, response, options) {
updateToken(options);
success(model, response, options);
};
return BBsync.call(this, method, model, options);
};
所有成功方法都被包装了。
这个解决方案有什么风险吗?
我们是否忽略了什么?
有更好的解决方案吗?
【问题讨论】:
-
对我来说似乎很合理。
标签: javascript jquery rest backbone.js