Я разрабатываю веб-сайт с помощью 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;
}
}
}
)
Куки файлы не стирают эту локальную переменную currentUser, которая исчезает. Когда вы обновите страницу, все объекты, которые вы сохранили в памяти, исчезнут, и служба 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;
}
}
})
Лично я думаю, что было бы лучше поговорить с вашим сервером и вернуть его пользователю. Куки будут отправляться на сервер, но это дает вашему серверу возможность проверить аутентифицированного пользователя. Он обеспечивает гораздо лучшую защиту от того, что кто-то крадет куки, истекает срок их действия и т.д.
И прекратите хранить currentUser на $ rootScope. Просто сохраните его в своей локальной переменной, и если кто-то захочет использовать currentUser, он может ввести службу Auth.