AngularJS最佳实践应用程序身份验证

时间:2014-03-08 01:10:07

标签: angularjs asp.net-mvc-4 asp.net-web-api

我开始构建一个Web应用程序,用户需要进行身份验证才能访问不同的模块。

我过去一直在使用ASP.NET MVC,使用FormsAuthentication和Server Sessions非常容易,所以我不必为了获取用户角色或任何其他用户相关数据而进行数据库往返每次我访问网络方法。

我一直在阅读, AngularJS 将无法正常工作,因此不会有任何服务器会话等等。所以......

  1. 如果我每次访问Web方法时都需要验证用户身份,我是否需要使用数据库或者我可以学习哪些好的练习?

  2. 我知道有很多方法可以在客户端存储状态数据但是这会如何影响Web应用程序的性能?

  3. 我已经看到,当用户登录应用程序时,最好的方法是将令牌发送到客户端,然后强制AngularJS在每次访问Web方法时发送该令牌...但是如何发送到客户端是用户sessionId(来自数据库),然后是每个发送该方法的Web方法,然后创建一个过滤器,在那里检查sessionId是否存在于数据库中,以便验证用户标识?

  4. 感谢任何建议或建议。

    感谢。

1 个答案:

答案 0 :(得分:1)

我对身份验证的看法是,在用户通过身份验证之前,您无需将AngularJS带入图片。您使用简单的登录页面并对用户进行身份验证,然后将其重定向到具有Angularjs的应用页面。请查看我的旧答案以获取更多详细信息How to handle authentication in Angular JS application

让我试着解决你的担忧。

  

如果我每次访问网页时都需要验证用户身份   方法我需要使用数据库还是有任何好的做法   我能学到什么?

一旦您通过身份验证,该部分由服务器和浏览器cookie处理,您就不需要做任何事情。标准MVC网站的工作原理。

  

我知道有很多方法可以在客户端存储状态数据,但是如何存储状态数据   会影响Web应用程序的性能吗?

由于AngularJS是SPA,因此没有页面刷新。存储在$rootScope或使用服务的数据存在,直到刷新页面。由于涉及的往返次数较少,性能会更好。

  

我已经看到,当用户以最佳方式登录应用程序时   将令牌发送到客户端,然后强制AngularJS发送它   每次访问Web方法时令牌......但是发送到的方法呢   客户端是用户sessionId(来自数据库),然后是每个Web   方法消费发送,然后在你的地方创建一个过滤器   检查数据库中是否存在sessionId,以便用户识别   有效吗?

这是标准的表单身份验证,对开发人员来说是透明的,在传统的MVC应用程序中进行身份验证所需的任何操作都可以在这里工作。您不必担心会话,令牌等。要在客户端获取用户身份,您可以使用getUser等方法编写angularjs服务以获取当前登录用户。但我警告你,授权相关的决定仍应在服务器上完成。