【问题标题】:prevent users to navigate back to specific routes with backbone防止用户使用主干导航回特定路线
【发布时间】:2014-12-17 13:01:58
【问题描述】:

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

我实际上只在我的应用程序中使用来自主干的路由器。当我启动应用程序时,我会呈现一个登录视图,并初始化主干路由器 (Backbone.history.start();)

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

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

我怎样才能做到这一点?我检查了其他几个问题,但答案对于我的用例来说太复杂了。我只是想阻止用户在登录后导航回特定视图。

【问题讨论】:

    标签: javascript backbone.js routes


    【解决方案1】:

    @Dethariel 感谢您的回答。我使用内置的 Backbone 路由器成功实现了某种会话。我从 Backbone.Router 执行方法 backbone router execute snippet 中的小示例 sn-p 开始,并做了类似于下面的操作:

    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);
      }
    });
    

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

    【讨论】:

      【解决方案2】:

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

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2012-06-22
        • 1970-01-01
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多