我正在尝试使用Backbone使用Devise(Rails的身份验证gem)实现身份验证。用户可以通过向/users/sign_out/
发送DELETE请求来退出Backbone,这样我就无法使用此链接,因为如果我点击它就是GET请求
<li><a href="/users/sign_out" class="thumbnail plain">sign out</a></li>
然后我在User模型上创建了一个logout方法,但要触发它我必须有一个用户模型的实例(显然)。我在路由器中创建了一个通过导航到logout
路由触发的注销方法,但由于我只能使用它的实例在用户模型上调用logout
,我正在创建一个新模型在注销方法中只是为了调用注销。
"logout": "logout"
},
logout: function(){
var foo = new app.Models.User
foo.logout();
}
这显然是一个坏主意,但我不知道还能做什么。你能推荐我应该做的事吗?有没有办法让注销成为一个类方法,所以我不需要实例化一个新模型只是为了注销或其他什么?
更新
这是User模型中的createUser方法,用于发送注册数据以进行设计。在成功回调中,它将会话分配给变量window.app.current_user = userSession;
。我还尝试在路由器上调用用户模型的注销方法,如此
在路由器中注销
logout: function(){
window.app.current_user.logout();
}
-
app.Models.User = Backbone.Model.extend({
initialize:function () {
},
createUser: function() {
var user = {};
user['email'] = this.get("email");
user['password'] = this.get("password");
user['password_confirmation'] = this.get("password_confirmation");
var registration = {};
registration['user'] = user;
var _this = this;
$.ajax({
url: '/users.json',
type: "POST",
data: {user: user, registration: registration},
success: function(userSession, response) {
window.app.current_user = userSession;
},
... code ommitted
logout: function(){
var me;
console.log("Logging out...");
me = this;
return $.ajax({
url: '/users/sign_out',
type: "DELETE",
dataType: "json",
success: function(data, textStatus, jqXHR) {
window.app.current_user = '';
},
error: function(jqXHR, textStatus, errorThrown) {
return alert("Error logging out: " + errorThrown);
}
});
},
答案 0 :(得分:2)
我有点困惑为什么在尚未创建用户模型时想要触发注销功能。能否解释一下你在路由器中注销这个功能背后的原因?
就个人而言,我会有一个会话模型,它会监听链接的点击事件。然后,这将调用一个logout方法,该方法将发出DELETE请求。
更新
这是一个快速的JsFiddle,它显示了创建模型并将其附加到全局变量: http://jsfiddle.net/Francium123/eBG3E/2/
var User = Backbone.Model.extend({
initialize:function () {
this.name = "MyName";
this.password = "password"
},
login:function(){
console.log("login called");
},
logout: function(){
console.log("logout called");
}
});
window.MyModels = window.MyModels || {};
window.MyModels.User = new User();
console.log(window.MyModels.User.login());
console.log(window.MyModels.User.logout());
请注意,这只是一个示例,我怀疑您是否希望将密码存储在模型中!
此外,您应该能够使用Backbone Models fetch(GET),save(POST / PUT),destroy(DELETE)方法,而不是直接在模型中编写ajax请求。如果需要,您可以覆盖模型同步方法。