我正在使用骨干路由器重定向到我的网页,例如我有这个网址
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方法,如何在骨干网中使用它?
答案 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中,并在应用启动时使用它重定向到右侧页面。