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

标签 javascript angularjs authentication single-page-application

我正在使用的 Web 框架具有基于 cookie(或 token )的身份验证。当用户注册时,会发生回发,并且服务器将身份验证 token 放置在 cookie 中,该 cookie 将自身附加到用户浏览器。所有后续请求都包含此 token ,因此从这个意义上来说是安全的。

我的问题:用户注册后我是否必须进行全页回发刷新才能将身份验证 token 放置在用户浏览器上?或者我可以简单地让服务器在成功的用户注册(也通过ajax完成)时返回一个身份验证 token (通过ajax)吗?如果可能的话我更喜欢后者。

谢谢。

最佳答案

如果您的框架返回一个 token ,您只需将其添加到所有后续请求的 header 中即可。

使其永久化需要额外的代码(例如:将其写入 localStorage)

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

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 header ,通常用于识别

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

cookie 有一些优点:比如过期日期,也有一些缺点:从 javascript 读取它并不是很优雅(通常需要一个包装器 lib、angular-cookie ,用于浏览器兼容性)。

在这两种情况下,当 cookie 过期或 token 无效(因此您将收到 40x 响应)时,您将必须使用一些 angular.js 代码来处理失败

关于javascript - SPA 具有 Angular 和基于 cookie 的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21826907/

相关文章:

javascript - 什么是javascript mvc/oop结构中的原型(prototype)

javascript - indexof 在变量为空或指定值之前不会更改,即使它应该检查每个 keyup 事件

javascript - 将序号添加到嵌套对象树中的 Javascript 对象

authentication - JBoss 服务器上的客户端身份验证

android - 移动应用程序的 2 因素身份验证

Javascript 函数在没有被调用的情况下执行?

javascript - 在 AngularJS 中 setTimeout 之前显示标签

angularjs - uglifyjsplugin 打破 angular 2 模板

angularjs - 如何将自定义输入指令及其父表单重置为 $pristine

authentication - Laravel Auth::user() 获取属性