阻止用户导航回具有骨干的特定路由

时间:2014-10-22 06:18:05

标签: javascript backbone.js routes

我是骨干新手,我想使用骨干路由器实现一个非常简单的身份验证。

我实际上只在我的应用程序中使用骨干路由器。当我启动应用程序时,我呈现一个登录视图,我也启动了骨干路由器(Backbone.history.start();)

如果登录成功,我呼叫router.navigate('mainmenu', { trigger: true, replace: false });导航到我渲染主菜单的新路线,但是当我点击浏览器的后退按钮时,我会导航回登录视图。

在导航到上一个视图(登录视图)之前,我想询问用户是否要先注销,如果注销过程顺利,那么他会被重定向到登录视图。

我怎样才能实现这一目标?我检查了一些其他问题,但答案对我的用例来说太复杂了。我只是想阻止用户在他们登录后导航回特定的视图。

2 个答案:

答案 0 :(得分:2)

@Dethariel感谢您的回答。我使用内置的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);
  }
});

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

答案 1 :(得分:0)

您可以添加一个将处理登录页面的主干路由(如果您还没有这样做)。一旦这条路线被击中,你就会这样做(伪代码跟随):

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

希望这有帮助。