我正在尝试将经过身份验证的用户保存到服务本地的变量,但在第二次访问时无法看到相同的值。这是代码,
app.factory('Auth', ['$http', '$state',
function ($http, $state) {
var currentUser = null;
var authenticated = false;
var setCurrentUser = function (user, flag) {
currentUser = {};
angular.extend(currentUser, user);
authenticated = flag;
};
var getAuthenticated = function () {
return authenticated;
};
var getCurrentUser = function () {
return currentUser;
};
return {
login: function (user, success, error) {
$http.post(UserApi.login().url, user).success(function (user) {
setCurrentUser(user, true);
window.location.replace('/');
}).error(error);
},
logout: function (success, error) {
$http.post(UserApi.logout().url).success(function () {
setCurrentUser(null, false);
window.location.replace('/');
}).error(error);
},
isAuthenticated: function () {
if (getAuthenticated() && getCurrentUser() != null) return true;
return false;
}
};
}]);
我希望在登录到currentUser
并将状态设置为authenticated
后存储用户详细信息,
当我尝试检查用户登录的状态时,这两个变量持有null
和false
,因此我失去了用户状态。因此,如何正确存储和检索数据,以确保用户登录状态。
答案 0 :(得分:3)
如评论中所述,Angular服务是在页面上内存中运行的JavaScript应用程序的一部分,因此只要刷新页面,该服务就会被重建。您必须选择一个持久性方案并使用其API,以便在页面加载中保留任何内容。
您有几个选择:
实际上这与Angular几乎没什么关系,只是一个JavaScript持久性问题。
以下是使用localStorage帮助您入门的代码的一个小示例:
var data = angular.fromJson(localStorage['my-storage-key']) || {
currentUser: null,
authenticated: false
};
var save = function () {
localStorage['my-storage-key'] = angular.toJson(data);
};
var setCurrentUser = function (user, flag) {
data.currentUser = {};
angular.extend(data.currentUser, user);
data.authenticated = flag;
save();
};
var getAuthenticated = function () {
return data.authenticated;
};
var getCurrentUser = function () {
return data.currentUser;
};