Javascript 如何在AngularJS中存储用户会话?

Javascript 如何在AngularJS中存储用户会话?,javascript,angularjs,authentication,session,cookies,Javascript,Angularjs,Authentication,Session,Cookies,我刚刚开始使用AngularJS,我正在尝试在我的AngularApp上存储用户会话 提交用户名和密码的第一步是有效的。 之后,我将从服务中检索到的用户名存储在$rootScope中。 下一页可以显示存储的用户名 但是刷新后,$rootScope为空 我正在尝试做一个尽可能简单的身份验证系统 myApp.controller('loginController', ['$scope', '$rootScope', '$location', 'AuthService', '$route', fu

我刚刚开始使用AngularJS,我正在尝试在我的AngularApp上存储用户会话

提交用户名和密码的第一步是有效的。 之后,我将从服务中检索到的
用户名
存储在
$rootScope
中。 下一页可以显示存储的
用户名

但是刷新后,
$rootScope
为空

我正在尝试做一个尽可能简单的身份验证系统

myApp.controller('loginController', ['$scope', '$rootScope', '$location', 'AuthService', '$route',
  function ($scope, $rootScope, $location, AuthService, $route) {

      $scope.login = function (credentials) {
        AuthService.login(credentials).then(function (response) {
          if(response.data == "0"){
            alert("Identifiant ou mot de passe incorrect");
          }
          else {
            // response.data is the JSON below 
            $rootScope.credentials = response.data;           
            $location.path("/");
          }
        });
      };

}]);
AuthService.login()
发出
$http
请求

JSON

HTML:

 <div>Welcome {{ credentials.user_display_name }}!</div>
欢迎{{credentials.user\u display\u name}!
我尝试了很多教程,但我无法使课程正常进行。
我已经使用了UserApp,但对我来说不合适。我想创建自己的简单身份验证。

$rootScope
在页面刷新时将始终重置,因为它是一个单页应用程序

您需要使用客户端持久化的东西,例如cookie或会话存储(因为它们都有过期时间)。请查看
$cookieStore
的文档:

请记住,敏感会话信息应加密。

您可以使用

AngularJS模块,使Web存储以角度方式工作。 包含两个服务:$localStorage和$sessionStorage

与其他实现的区别

没有能手和二传手的废话- 就在AngularJS主页上:“与其他框架不同,没有 需要[…]将模型包装在访问器方法中。只是简单的旧 现在,您可以在实现 使用Web存储实现数据持久化

会话存储-我们已经涵盖了这一经常被忽略的问题

编写清晰的代码-以有角度的方式编写,结构良好 考虑到可测试性

无Cookie回退-Web存储在所有应用程序中都随时可用 AngularJS官方支持的浏览器,此类回退在很大程度上是无效的 多余的

下面显示了一个示例

var eS = angular.module('exampleStore', ['localStorage']);

您需要在服务器上创建api来收集当前用户。此api必须返回与登录后的用户对象相同的用户对象


对于要在$routeProvider中保护的每个$route.path,请使用ng init在控制器中调用此api。如果api返回一个对象,请将该对象添加到$rootScope中,否则,请强制用户登录页面。

身份验证系统是否可以使用
$cookieStore
的可能副本?我认为
$cookieStore
可以使其正常工作。谢谢Andrew。是的,我过去使用过$cookieStore。我认为它更容易受到XSS的攻击
var eS = angular.module('exampleStore', ['localStorage']);