我正在尝试使用 Backbone 使用 Devise(Rails 的身份验证 gem)实现身份验证。用户可以通过发送 DELETE 请求来退出 Backbone,/users/sign_out/
所以我无法让这个链接工作,因为如果我点击它,它就是一个 GET 请求
<li><a href="/users/sign_out" class="thumbnail plain">sign out</a></li>
然后我在用户模型上创建了一个注销方法,但要触发它,我必须有一个用户模型的实例(显然)。我在路由器中创建了一个注销方法,该方法通过导航到路由来触发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);
}
});
},