我正在使用angularjs和nodeJS开发网站,我的问题是,当在cookie中存储对象时,此对象仍将在cookie中,直到我重新加载页面,这是我的代码
.service("Auth", function ($cookies, $rootScope) {
var currentUser = null;
return {
set: function (data) {
currentUser = data;
$cookies.putObject("user", data, {
secure: true,
expires: (new Date(new Date().setMinutes(new Date().getMinutes() + 30))).toString()
});
$rootScope.currentUser = currentUser;
}
,
get: function () {
return currentUser;
}
,
isLoggedIn: function () {
if (currentUser) {
return true;
} else {
return false;
}
}
,
logOut: function () {
$cookies.remove('user');
// currentUser = null;
$rootScope.currentUser = null;
}
}
}
)
答案 0 :(得分:1)
Cookie没有被删除,它的当前用户本地变量正在消失。刷新页面时,存储在内存中的所有对象都将消失,并且将重建Auth服务。您需要从cookie中正确地重新初始化并再次设置currentUser。像这样:
.service("Auth", function ($cookies) {
// re-read the user from the $cookies
var currentUser = $cookies.getObject("user") || null;
return {
set: function (data) {
currentUser = data;
$cookies.putObject("user", data, {
secure: true,
expires: (new Date(new Date().getTime() + 30 * 60 * 1000).toString()
});
}
,
get: function () {
return currentUser;
}
,
isLoggedIn: function () {
if (currentUser) {
return true;
} else {
return false;
}
}
,
logOut: function () {
$cookies.remove('user');
currentUser = null;
}
}
})
我个人认为与您的服务器通信并让它返回用户对象会更好。 Cookie将被发送到服务器,但它使您的服务器有机会验证经过身份验证的用户。它可以提供更好的安全性,防止有人窃取cookie,让它们过期等等。
并停止在$ rootScope上存储currentUser。只需将其保存在本地变量中,如果有人想要currentUser,他们就可以注入Auth服务。