2014-10-22 64 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); 
    } 
}); 

这是非常小的,而且我不认为这是最好的或安全的方式,但它是一个对我来说是一个好的起点。