如何使用AngularJS来存储“令牌”#39;在应用程序的生命周期?

时间:2014-07-14 09:00:08

标签: javascript angularjs

我正在使用AngularJS登录用户(使用Restangular)。登录控制器返回一个'令牌',然后我需要在每个请求上使用它。

我的问题是,使用AngularJS存储此令牌的最佳方法是什么?它需要在应用程序的生命周期内存在。

我正在寻找服务,但我必须继续将其注入控制器以保持其存活。

2 个答案:

答案 0 :(得分:2)

只要您使用网络应用程序,生命周期就不是承诺,但如果您愿意,可以使用localstorage, 这里是一个示例服务如何在angular中使用localstorage,你可以将它添加到service.js文件:

var storeService = innovidServices.factory('storeService', function() {

    var service =
    {
        setClientData:function(client_details)
        {
            window.localStorage.setItem( "client_data", JSON.stringify(client_details) );
            client_data = client_details;
        },
        getClientData:function()
        {
            if (client_data == null)
            {
                client_data = JSON.parse(window.localStorage.getItem("client_data"));
            }
            return client_data;
        }
    }

    var client_data = null;

    return service;
});

答案 1 :(得分:2)

我认为最好的方法是将这个'令牌'存储在$ rootScope中。

myapp.controller('loginCtrl', function($scope, $rootScope) {
    ...
    $rootScope.token = Token;
    ...
});

然后使用http拦截器将此注入例如每个查询的GET参数

myapp.factory('httpTokenInterceptor', function ($rootScope) {
  return {
    request: function (config) {
      var token = $rootScope.token;
      if (token) {
          config.url =  URI(config.url).addSearch({'token':token}).toString();
      }
      return config;
    }
  };
});

myapp.config(function ($httpProvider) {
  $httpProvider.interceptors.push('httpTokenInterceptor');
});