在angularjs中维护来自服务器应用程序的会话

时间:2016-05-04 09:44:41

标签: angularjs

我有一个angularjs应用程序,在这个应用程序中,当我提交它时我有一个登录表单我调用了一个休息服务来验证用户到我的服务器应用程序,如下所示:

$http.get('http://localhost:8080/user', {
                headers : credentials ? {
            authorization : "Basic "
            + btoa(credentials.username + ":"
              + credentials.password)
          } : {};
              }).then(function(response) {
                if (response.data.name) {
                  $rootScope.authenticated = true;
                  $rootScope.username=response.data.name;
                  $rootScope.roles=response.data.authorities;
                  $rootScope.sessionid=response.data.details.sessionId;
                } else {
                  $rootScope.authenticated = false;
                }
              }, function() {
                $rootScope.authenticated = false;
              });

因此$ rootScope将包含有关经过身份验证的用户的所有信息,但是当我刷新应用程序时,我附加到$ rootScope的所有信息都将被删除。

请注意http://localhost:8080/user将始终保持会话。

我该如何解决?

2 个答案:

答案 0 :(得分:1)

您可以将其存储在sessionStorage中,也可以只从服务器端获取当前用户。然后,为了检索它们,请使用angular.run

angular.run(...function($http, $rootScope){
     // either use session storage or $http to retrieve your data and store them in $rootScope.
    // if you use $http i suggest you to store the promise of $http to be sure in your controller/route to wait that it has been resolved.
 });

使用f5时丢失存储内容的事实是正常的,这样做会丢失所有javascript上下文。 angular.run的使用允许在调用任何控制器之前使用请求但是使用$ http,您可能需要等待承诺的结束。因此,最好在$ rootScope中引用promise存储,以便能够在javascript部分中使用它。您可以直接引用模板中的数据,因为它们将在加载后立即刷新。

答案 1 :(得分:1)

检查Local and Session storage服务。您可以使用getter和setter轻松地将变量附加到变量,并通过页面刷新来检索它们。

示例:您可以设置如下变量: localStorageService.set('myVar', data);

然后在刷新后或其他应用程序中的其他控制器中检索它: localStorageService.get('myVar');

文档记录清晰,易于使用。