骨干路由器如何从url中隐藏参数

时间:2016-09-10 09:29:21

标签: backbone.js backbone-routing

我正在使用骨干路由器重定向到我的网页,例如我有这个网址

http://localhost:56508/#/RegistryMain/44/1234

代码

RegistryMain: function (id, cnt) {
        var self = this;
        this.load();
        require([
         'js/views/Questionaire/RegistryMain'
        ], function (RegistryMainView) {
            self.shell();
            if (typeof app.RegistryMainView !== 'undefined') {
                app.RegistryMainView.destroy();
            }
            app.RegistryMainView = new RegistryMainView({ Id: id, cnt: cnt });
            $("#main-nav li.active").removeClass("active");
            $("#admin").addClass("active");
        });
    },

出于安全原因,我需要隐藏网址中的/44/1234,以便用户无法重复使用它们或将其更改为/45/1234,例如访问禁止的网页。

我怎样才能在骨干中做到这一点?

如果我应该使用POST方法,如何在骨干网中使用它?

1 个答案:

答案 0 :(得分:0)

mu is too short说你正试图在错误的地方处理安全问题是正确的。你根本不能信任客户端代码。

每次前端应用程序调用API端点时,您应该从服务器检查用户的权限,以避免用户导航到他们无权查看的页面,或者避免他们通过发布来弄乱数据无效的东西到端点。

您的API应返回401 unauthorized HTTP响应代码,以通知您的前端应用程序。

为了平滑页面转换,如果API调用失败,请将用户重定向到错误页面。

这就是说

为避免显示网址,您可以直接致电loadUrl

// current url: http://localhost:56508/#/RegistryMain

Backbone.history.loadUrl("RegistryMain/44/1234");

// current url: http://localhost:56508/#/RegistryMain

这将触发路由回调而不更改url,因此用户永远不会看到params。

  

现在我在项目中使用.loadUrl,所有页面都有相同的URL,但是当我刷新页面时,它会重定向到 login 页面(第一个页面)   我的项目中的页面)。 如何刷新当前页面?

这是不使用url触发路由的缺点,您现在无法知道应用程序的状态,因为单个页面应用仅存在于当前页面中,并且刷新完全启动新实例。

如果不使用网址,你应该重新考虑是正确的选择。如果它仍然存在,您可以将当前网址保存在localStorage中,并在应用启动时使用它重定向到右侧页面。