2014-10-22 61 views
1

我是新來的主幹,我想使用主幹路由器實現一個非常簡單的認證。阻止用戶回到具有骨幹網的特定路由

我實際上只在我的應用程序中使用骨幹網路由器。當我啓動應用程序時,我呈現一個登錄視圖,並且我也啓動骨幹路由器(Backbone.history.start();)

如果登錄成功,我會撥打router.navigate('mainmenu', { trigger: true, replace: false });導航到一個新的路線,但是當我點擊瀏覽器的後退按鈕時,我會回到登錄視圖。

在導航到前一個視圖(登錄視圖)之前,我想詢問用戶他是否想先註銷,如果註銷過程順利,那麼他將被重定向到登錄視圖。

我該如何做到這一點?我檢查了其他幾個問題,但對於我的用例來說,答案太複雜了。我只是想阻止用戶返回到特定的視圖,如果他們登錄。

回答

0

你可以添加一個骨幹路由,它將處理登錄頁面(如果你還沒有這樣做)。一旦這條路線被擊中,你(僞代碼如下):

if (user.isLoggedIn()) { 
    if (showLogoutPrompt().decision === "logout") { 
     user.logout(); 
    } 
} 

希望這會有所幫助。

2

@Dhahariel謝謝你的回答。我使用內置的Backbone路由器成功實施了某種會話。我開始從Backbone.Router他們的小例子片斷執行方法backbone router execute snippet並沒有類似的東西,以吼叫:

var Router = Backbone.Router.extend({ 
    // define routes and calkbacks 
    // .... 
    // define routes and calkbacks 

    execute: function(callback, args) { 
    // execute will be called before the callback for each specific route 
    // get the next route in here 
    var nextRoute = Backbone.history.fragment; 
    if(user.LoggedIn()){ 
     // check if nextRoute is '#login*'. I could make other checks as well 
     if(nextRoute.indexOf('login')>-1) 
      prompt('Log out?'); 
     // else continue routing 
     else if (callback) callback.apply(this, args); 
    } 
    else if (callback) callback.apply(this, args); 
    } 
}); 

這是非常小的,而且我不認爲這是最好的或安全的方式,但它是一個對我來說是一個好的起點。