backbone 路由器如何隐藏参数 url

backbone router how to hide parameters from url

我正在使用 backbone 路由器重定向到我的页面,例如我有这个 url

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

出于安全原因,我需要从 url 中隐藏 /44/1234,这样用户就无法重复使用它们或将它们更改为 /45/1234 并访问禁止访问的页面。

我如何在 backbone 中执行此操作?

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

说得对,您正试图在错误的地方处理安全问题。您根本不能信任客户端代码。

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

您的 API 应该 return 一个 401 unauthorized HTTP 响应代码来通知您的前端应用程序这种情况。

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

话虽这么说

为了避免显示url,可以直接调用loadUrl:

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

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

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

这将在不更改 url 的情况下触发路由回调,因此用户 永远不会 看到参数。


Now that I use .loadUrl in my project, all pages have the same URL, but when I refresh a page, it redirects to the login page (the first page in my project). How to make it refresh the current page?

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

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