2012-02-29 52 views
0

我有以下的微小的困境路线的改变:我有一个主干应用程序,这几乎完全是基于路由,也就是说,如果我做nameoftheapp/photos/1/edit我应该去到编辑页面对于给定的照片。问题是,由于我的视图逻辑在客户端几乎100%发生(我使用基于服务的精简服务器进行存储和验证),所以我如何避免那些未经授权的用户访问该页面?当然,我可以让路由器检查用户是否被授权,但这已经导致重复验证方面的工作。当然,我不能在没有验证的情况下离开服务器端,因为那样API将暴露给任何类型的访问。验证在Backbone.js的

我现在没有看到任何其他方式。除非有人提出了一个聪明的想法,我想我将不得不复制验证客户端和服务器端。

回答

4

基本规则应该是“永远不要相信客户”。切勿向客户提供他们不允许拥有的东西。

所以,如果用户去nameoftheapp/photos/1/edit,想必你尝试从服务器获取图像。

服务器应该响应HTTP 401响应(未授权)。

您的看法应该有这样的错误处理程序,并告知他们没有授权用户 - 无论是什么方式,你有兴趣 - 在编辑观点的错误信息,或“history.back() “返回到之前的”页面“。

所以,你真的没有重复验证逻辑 - 你只需要你的意见,能够有意义地从服务器验证的响应做出回应。

你可能会说,“这是没有效率的 - 你最终使更多的API调用”,但那些未经许可的电话是不会被使用的应用程序中的任何规则的方式,用户的正常现象,他们将成为探测的结果,我可以通过观看网络标签找到所有的API调用,并使用我想要的任何工具直接点击API。所以,如果你在客户端进行了验证,那么真的不会有更多的API流量。

0

我遇到了同样的问题,前一阵子,它似乎是最好的做法是使用服务器端验证。我的建议...使用模板引擎,如Underscore,它是Backbone的依赖项,设计模板,对于那些只有经过身份验证的用户或有权这样做的用户,才可以访问......您要求服务器缺少基于CSRF标记或session_id或两者(或您选择的任何其他服务器端验证方法)的数据(通常是小块JSON数据),然后渲染模板......否则,会显示预定义的错误相同的模板...逻辑足够简单...