SPA具有Angular和基于cookie的身份验证

时间:2014-02-17 10:44:22

标签: javascript angularjs authentication single-page-application

我使用的Web框架具有基于cookie(或令牌)的身份验证。当用户注册回发时,服务器将身份验证令牌放在将自身附加到用户浏览器的cookie中。所有后续请求都包含此令牌,因此在这种意义上是安全的。

我的问题 :在用户注册以获取用户浏览器上的auth-token后,是否必须执行整页回发刷新?或者我可以简单地让服务器在成功的用户注册(通过ajax完成)时返回一个auth令牌(通过ajax)?如果可能,我更喜欢后者。

感谢。

1 个答案:

答案 0 :(得分:1)

如果您的框架提供了一个令牌,您只需将其添加到所有后续请求的标头中。

使这个永久性需要额外的代码(例如:在localStorage中编写)

我不知道您的框架想要的Header :)但我可以假设您的登录控制器可能如下所示:

angular.module('coolModule', [])
.controller('CoolController', function ($scope, $http) {

  $scope.loginButton = function () {

    // assuming username and password are in the scope
    $http.post('/api/login', { $scope.username, $scope.password })
    .success(function (data, status, headers, config) {
      $http.defaults.headers.common['X-My-Token'] = data.token;
    });

  }
})

后续请求将有一个X-My-Token标头,通常用于标识

编辑: 是的,设置一个cookie(在javascript或服务器响应中)将使它在每次请求时被发送(就像这个互联网世界中的所有cookie) 如果你正在开发后端也会更加优雅,让后端向客户端发送cookie,而不是像你评论的那样手动编写^ _ ^

Cookie 有一些专业:就像过期日期一样,有些缺点:从javascript中读取它并不是很优雅(通常需要一个包装器lib,angular-cookie ,浏览器兼容性。)

在两种情况下,如果Cookie过期或令牌无效(因此您将收到40x响应),则必须使用某些angular.js代码处理失败