首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于基于大规模身份验证的应用程序,建议使用angularjs吗?

对于基于大规模身份验证的应用程序,建议使用angularjs吗?
EN

Stack Overflow用户
提问于 2015-01-12 12:01:04
回答 2查看 187关注 0票数 2

已经有一段时间了,我正在学习和使用angularjs框架,尽管它的一些特性确实很棒,但在我看来,对于基于身份验证的应用程序来说,它的关键特性似乎有点问题。

让我们看一个例子。假设我有一个有用户登录的网站,一旦用户登录,他就可以点击到他/她的仪表板页面的链接。在仪表板上,用户可以看到一些私有数据。现在,我用来做它的方法是在服务器端运行一些脚本,然后如果一个用户连接了,返回一些HTML,如果没有,则将用户重定向到另一个位置。angularjs鼓励我这样做的方法是使用路由功能,如下所示:

代码语言:javascript
复制
when('/dashboard', {
    templateUrl: 'dashboard.html',
    controller: 'DashboardController'
  })

这样,如果用户没有连接,angularjs将首先获取模板HTML,然后控制器将获取一些数据并接收身份验证错误,然后将路由重定向到另一个位置。在我看来,这似乎是一个更糟糕的解决方案,原因不止一个:

1)首先,我的HTML会暴露给每个人。尽管这并不是毁灭性的,但这似乎是一种糟糕的安全实践(假设您甚至没有facebook帐户,但仍然可以看到所有的facebook页面HTML,更糟糕的是,所有类似的对象和字段(例如user.accessToken) )。

2)我会向服务器发出更多的请求,首先是获取模板的请求,其次是身份验证和数据请求,还有可能是重定向的请求。我假设angularjs缓存模板,所以可能实际的请求数量比我前面提到的要小,不过,在服务器端处理所有这些都只是一个请求--和angularjs一样,它也不能加载整个页面,而只能加载所需的HTML抛出AJAX。我在这里的情况是有争议的,但还是有些地方似乎不对劲。

3)这也许是我最重要的问题。我在服务器端所做的一切都必须粘贴到客户端。例如,路由特性必须在服务器端与客户端一样清晰--以防用户直接进入我的应用程序中的某个内部页面,或者通过应用程序链接中的路由。这意味着每次在路由配置中发生更改时,我都必须在服务器端和客户端进行一次更改--在我看来,这似乎是代码的错误实践和模块化。

这类应用不推荐使用angularjs吗?我是否应该使用angularjs功能来补充我的应用程序(比如控制器、变量绑定等),但是忽略那些没有的特性(比如路由)?

我是不是看错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-12 12:25:23

你没有错误地看待它,只是从一个不同的角度。你不习惯开发SPA,所以这是正常的。

1)每个人都可以看到HTML,但这只是一个模板。它只包含html模板,而不是与每个人的facebook配置文件相关的特定数据。服务器控制返回给用户的数据,并且只返回用户可以访问的数据。实际上,这与非SPA没有什么不同,除了来回发送的数据量之外。

2)对于一个普通的应用程序,首先必须请求登录页面,然后将数据发送到服务器,然后再进行重定向。这是三个请求。对于第一次加载,第二次用于登录视图模板,然后是第三次发布登录数据,然后是第四次获得主登录视图,第五次用于视图所需数据。这只剩两个了。在登录之后,如果用户单击“注销”,然后再次登录,则只有两个请求和三个请求,或者如果他们关闭选项卡并返回,将是3个请求。换句话说,这没有太大的区别。在大多数情况下,缓存后的请求数量将是相同的,即使不会减少。

3) SPA中路由的工作方式是只发生在客户端上。没有必要在服务器上也有它。只要重写所有返回index.html的请求的url,那么角路由就会处理剩下的部分。

关于它的建议。其实并没有这样的建议。由你决定。两者各有优缺点。角的缺点大多与学习曲线有关。

票数 2
EN

Stack Overflow用户

发布于 2015-01-12 12:23:45

是的,你确实看错了。您混淆了客户端和服务器端的问题。

您提出的身份验证解决方案,正如您自己已经说过的,从安全性的角度来看是不好的。将HTML传递给用户,尽管他/她没有经过身份验证,但这是个坏主意。

身份验证总是必须在服务器端完成。从来不信任客户端。这就是为什么当您有一个未经身份验证的用户请求您的受限访问dashboard.html时,您发送了一些HTTP错误(通常是401或403,取决于该用户是未经身份验证的还是未授权的)。这样,未经身份验证的用户就永远看不到dashboard.html,您的问题1和2就解决了。

你的第三点是另一回事,但也是无效的。您的客户端和服务器端没有理由具有相同的路由特性。在大多数情况下,路由应该由客户端决定。例如,如果您的用户手动输入http:://mydomain.org/subsite,服务器将他重定向到http:://mydomain.org,其中AngularJS使用适当的路由。

因此,您的观点并不是说AngularJS是需要身份验证的应用程序的问题。事实上,有许多web应用程序使用AngularJS进行身份验证。因此,作为结论:不,您可以使用AngularJS和任何其他JavaScript技术一样用于经过身份验证的站点。但是,如果它是“推荐”(对于您的项目)是另一回事,这取决于更多的因素,并超出了它的范围。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27901504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档