2013-09-16 14 views
1

我正在嘗試使用Backbone來實現與Devise(Rails的身份驗證gem)的身份驗證。用戶可以通過發送刪除請求到/users/sign_out/登出骨幹的,所以如果我點擊它,它是一個GET請求Backbone中的類方法

<li><a href="https://stackoverflow.com/users/sign_out" class="thumbnail plain">sign out</a></li> 

然後我在用戶模式創造出了註銷方法,我不能讓這個環節,因爲工作,但要觸發它,我必須有一個用戶模型的實例(顯然)。我在路由器中創建了一個註銷方法,該方法通過導航到logout路由而被觸發,但由於我只能通過其實例在用戶模型上調用logout,所以我在註銷方法中創建一個新模型以調用註銷。

"logout": "logout" 

    }, 

    logout: function(){ 
    var foo = new app.Models.User 
    foo.logout(); 

    } 

這顯然是一個壞主意,但我不知道該怎麼辦。你能推薦我應該做什麼嗎?有沒有一種方法可以使註銷成爲類方法,所以我不必爲了註銷或其他目的而實例化新模型?

更新

這是在發送所述登記數據制定用戶模型中的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); 
    } 
    }); 

}, 

回答

2

我稍微困惑,爲什麼你會當用戶模型尚未創建時想要觸發註銷功能。你能解釋一下你的路由器有這個註銷功能的原因嗎?

就我個人而言,我將有一個會話模型,用於偵聽鏈接的點擊事件。然後這將調用一個註銷方法,這將使DELETE請求。

UPDATE

這裏是一個快速的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()); 

請注意,這只是一個例子,我懷疑你會想要在模型中存儲密碼!

另外,你應該能夠使用骨幹模型獲取(GET),節約(POST/PUT),銷燬(DELETE)方法,而不是直接在模型編寫Ajax請求。如果需要,您可以重寫模型同步方法。

+0

我也有用戶模型的登錄方法。用戶登錄,但我沒有會話,如果我有一個帶有註銷方法的會話模型,那麼我仍然需要有一個可用於調用註銷的會話實例,這與使用我描述的用戶模型。但是我敢肯定,我所做的一切都是錯誤的,所以如果你可以給出關於如何保持session進入javascript的指針,以便我可以呼叫註銷它會很有幫助 – Leahcim

+0

@Leahcim:如果你有一個用戶你爲什麼不在某處保存對該用戶的引用,以便你可以調用'logout'呢? –

+0

@muistooshort所以只分配從登錄到成功回調(到登錄)一currentUser變量的反應如何?保持currentUser一個全局變量? – Leahcim

相關問題