Backbone.js中路由更改的验证

Backbone.js中路由更改的验证,backbone.js,Backbone.js,我有以下小难题:我有一个主干应用程序,它几乎完全基于路由,也就是说,如果我想nameofapp/photos/1/edit,我应该转到给定照片的编辑页面。问题是,由于我的视图逻辑几乎100%发生在客户端(我使用基于精简服务的服务器进行存储和验证),如何避免出现未经授权的用户访问该页面的问题?当然,如果用户获得授权,我可以让路由器进行检查,但这已经导致验证工作的重复。当然,我不能在没有验证的情况下离开服务器端,因为这样API就会暴露给任何类型的访问 我现在没有别的办法。除非有人想出一个聪明的主意,

我有以下小难题:我有一个主干应用程序,它几乎完全基于路由,也就是说,如果我想
nameofapp/photos/1/edit
,我应该转到给定照片的编辑页面。问题是,由于我的视图逻辑几乎100%发生在客户端(我使用基于精简服务的服务器进行存储和验证),如何避免出现未经授权的用户访问该页面的问题?当然,如果用户获得授权,我可以让路由器进行检查,但这已经导致验证工作的重复。当然,我不能在没有验证的情况下离开服务器端,因为这样API就会暴露给任何类型的访问


我现在没有别的办法。除非有人想出一个聪明的主意,否则我想我必须复制客户端和服务器端的验证。

基本规则应该是“永远不要信任客户端”。永远不要向客户交付他们不允许拥有的东西

因此,如果用户转到app/photos/1/edit的
nameofapp/photos/1/edit
,您可能会尝试从服务器获取图像

服务器应使用HTTP 401响应(未经授权)进行响应

您的视图应该对此有一个错误处理程序,并通知用户他们没有授权进行此操作(以您感兴趣的任何方式),在编辑视图上显示一条错误消息,或使用“history.back()”返回上一个“页面”

因此,您实际上不必复制验证逻辑——您只需要视图能够对来自服务器的验证响应做出有意义的响应


你可能会说,“这是没有效率的-你最终会进行更多的API调用”,但这些未经授权的调用不会是用户以任何常规方式使用应用程序的正常情况,它们将是探测的结果,我可以通过查看网络选项卡找到所有API调用,并直接使用我想要的任何工具点击API。因此,如果在客户机中进行了验证,那么就不会有更多的API通信了。

基本规则应该是“永远不要信任客户机”。永远不要向客户交付他们不允许拥有的东西

因此,如果用户转到app/photos/1/edit的
nameofapp/photos/1/edit
,您可能会尝试从服务器获取图像

服务器应使用HTTP 401响应(未经授权)进行响应

您的视图应该对此有一个错误处理程序,并通知用户他们没有授权进行此操作(以您感兴趣的任何方式),在编辑视图上显示一条错误消息,或使用“history.back()”返回上一个“页面”

因此,您实际上不必复制验证逻辑——您只需要视图能够对来自服务器的验证响应做出有意义的响应


你可能会说,“这是没有效率的-你最终会进行更多的API调用”,但这些未经授权的调用不会是用户以任何常规方式使用应用程序的正常情况,它们将是探测的结果,我可以通过查看网络选项卡找到所有API调用,并直接使用我想要的任何工具点击API。因此,如果您在客户端进行了验证,那么就不会有更多的API通信了。

我刚才遇到了同样的问题,似乎最好的做法是使用服务器端验证。我的建议。。。使用像下划线这样的模板引擎,它是主干网的一个依赖项,设计模板,对于那些只有经过身份验证的用户或有权这样做的用户才能访问的路由。。。您根据一些CSRF令牌或会话id(或您选择的任何其他服务器端验证方法)向服务器请求缺少的数据(通常是小块json数据),然后呈现模板。。。否则,将使用同一模板渲染预定义错误。。。逻辑非常简单…

我不久前遇到了同样的问题,似乎最好的做法是使用服务器端验证。我的建议。。。使用像下划线这样的模板引擎,它是主干网的一个依赖项,设计模板,对于那些只有经过身份验证的用户或有权这样做的用户才能访问的路由。。。您根据一些CSRF令牌或会话id(或您选择的任何其他服务器端验证方法)向服务器请求缺少的数据(通常是小块json数据),然后呈现模板。。。否则,将使用同一模板渲染预定义错误。。。逻辑很简单