如何阻止用户直接在Backbone和Nodejs中访问单页应用中的其他路由?

时间:2014-07-20 18:15:44

标签: node.js backbone.js

我正在构建一个需要登录的应用程序,如果成功,会将您转到另一个名为events的页面。但是,Backbone使用URL栏中的哈希值,因此,有人访问该页面的请求永远不会发送到NodeJs服务器。

问题是,没有登录的人只需输入http://www.mywebsite.com/#events

即可访问该页面

如何防止这种情况?

1 个答案:

答案 0 :(得分:0)

覆盖'执行'功能在骨干路由器中。

来自文档:

  

router.execute(callback,args)

     

无论何时路由,都在路由器内部调用此方法   匹配及其相应的回调即将执行。   覆盖它以执行自定义解析或包装您的路由   例如,在将查询字符串传递给路径之前解析查询字符串   回调,像这样:

所以,例如:(http://plnkr.co/edit/BqD4YfjQYz2RITWNhBKZ?p=preview

  var Router = Backbone.Router.extend({
    execute: function(callback, args) {
        if(!someLoginFunctionCheck()) {
          this.navigate('#')
        } else {
          if (callback) callback.apply(this, args);
        }
      }
  });