如何在Angular JS应用程序中处理身份验证

arn*_*old 18 authentication cookies session angularjs

我正在我的角度js应用程序中实现一个auth系统.

我正在计划如下:

  1. 获取用户信息(登录表单中的名称和传递)
  2. 检查用户是否存在
  3. 如果存在服务器响应会话cookie,前端将重定向到某个页面.
  4. 然后用户将执行一些将生成API请求的任务
  5. API请求应包含在步骤3中发送的cookie信息
  6. 服务器检查cookie是否已生成,如果找到cookie,则响应API请求结果.在我的服务中,我正在做类似的事情
    MyApp.service('myAuth', function($http, $q) {
        this.authHeader = null;
        this.checkAuth = function(){
        //do api call and if success sets this.authHeader = response
        }
        this.isAuthenticaed = function(){
            this.authHeader ? return this.authHeder  : return false;
       }

提交登录表单后,我将调用checkAuth并从我的服务器返回我的会话cookie,如何在执行下一个REST调用时添加cookie信息,以及用户在登录后在整个应用程序中导航时我想检查每个时间isAuthenticaed是真还是假,在Angularjs导航到另一个页面时它是否会在第一次调用后设置为true后重置?我的方法是1-6好还是你有什么具体建议吗?顺便说一下,我检查了以前的条目,但那些不是我想知道的.

Cha*_*ani 35

我不确定你的后端,但我就是这样做的

  • 创建一个单独的登录页面(专用URL不是角度子视图或模态对话框).
  • 如果未经过身份验证的用户重定向到此登录页面.这是由服务器重定向完成的.此页面可能使用或不使用角度框架,因为它只涉及将用户\密码发送到服务器.
  • 从登录页面发出POST(不是AJAX请求),并在服务器上进行验证.
  • 在服务器上设置auth cookie.(不同的框架做的不同.ASP.Net设置表单身份验证cookie.)
  • 一旦用户通过身份验证,就会将用户重定向到实际的角度应用并加载其所有组件.

这节省了在Angular中管理客户端身份验证所需的任何代码.如果用户登陆此页面,他将通过身份验证并拥有cookie.

此外,默认浏览器行为是发送与每个请求相关联的域的所有cookie,因此您不必担心角度是否正在发送一些cookie.

  • 这是一个非常好的建议,不仅简化了过程,而且开辟了获得更好表现的新机会.如果有人对上述答案方法感兴趣,请查看此[ng-conf video](http://youtu.be/62RvRQuMVyg?t=2m41s)有关此主题的信息. (2认同)
  • 当你在角度应用程序中会话到期时会出现问题.并且您不希望通过离开登录URL来丢失应用程序状态. (2认同)

小智 7

我使用http-auth-interceptor.http://ngmodules.org/modules/http-auth-interceptor

在我的后端(asp.net mvc)中,我构建了一个简单的身份验证服务,401如果用户未经过身份验证,则返回http错误.然后我在SPA站点中使用登录视图处理错误.

  • 这个模块是最好的选择,原始的博客文章解释了单页应用程序中的/ login或/ logout路由是否真的不再有意义(在后端它是如此).刚刚开始使用http-auth-interceptor并且看到它做了什么/不做什么 - 所以从整体方法的角度来看这个答案看起来最好但是并没有涵盖登录流程的所有方面(从spa /前端到后端)并且,对于失败和成功都是如此).http://frederiknakstad.com/authentication-in-single-page-applications-with-angular-js/提供了大部分缺失的细节. (2认同)