验证Backbone.js中的路由更改

时间:2012-02-29 13:05:12

标签: backbone.js

我有以下微不足道的困境:我有一个骨干应用程序,几乎完全基于路由,即如果我做nameoftheapp/photos/1/edit我应该转到给定照片的编辑页面。问题是,因为我的视图逻辑在客户端几乎100%发生(我使用基于服务的瘦服务器进行存储和验证)如何避免未经授权的用户到达该页面的问题?当然,我可以让路由器检查用户是否获得授权,但这已经导致在验证方面的重复工作。当然,我无法在没有验证的情况下离开服务器端,因为那时API将暴露给任何类型的访问。

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

2 个答案:

答案 0 :(得分:4)

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

因此,如果用户转到nameoftheapp/photos/1/edit,可能是您尝试从服务器获取图像。

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

您的视图应该有一个错误处理程序,并通知用户他们没有被授权 - 以您感兴趣的任何方式 - 编辑视图上的错误消息或“history.back()”返回上一个“页面”。

因此,您实际上不必复制验证逻辑 - 您只需要您的视图就能够有效地响应来自服务器的验证响应。

您可能会说,“效率不高 - 您最终会进行更多的API调用”,但这些未经授权的调用不会是以任何常规方式使用该应用的用户的正常情况,他们会去作为探测的结果,我可以通过观察网络选项卡找到所有API调用,并使用我想要的任何工具直接命中API。因此,如果您在客户端进行验证,那么实际上将没有更多的API流量。

答案 1 :(得分:0)

我前一段时间遇到过同样的问题,最佳做法似乎是使用服务器端验证。我的建议......使用像Underscore这样的模板引擎,它是Backbone的依赖项,设计模板,对于那些只有经过身份验证的用户或有权这样做的人来说,可以访问...你要求服务器基于某些CSRF令牌或session_id或两者(或您选择的任何其他服务器端验证方法)丢失数据(通常是小块的json数据),并渲染模板...否则您将呈现预定义的错误相同的模板...逻辑很简单......