我正在使用AngularJS登录用户(使用Restangular)。登录控制器返回一个'令牌',然后我需要在每个请求上使用它。
我的问题是,使用AngularJS存储此令牌的最佳方法是什么?它需要在应用程序的生命周期内存在。
我正在寻找服务,但我必须继续将其注入控制器以保持其存活。
答案 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');
});