#angularjs #cookies
#angularjs #файлы cookie
Вопрос:
Я использую AngularJS для проекта веб-разработки, и я застрял, потому что пытаюсь сохранить сеанс пользователя в файле cookie, чтобы они не могли получить доступ к странице входа или регистрации, когда они уже вошли в систему, а также по другим причинам.
Похоже, происходит то, что я сохраняю пользовательские данные в cookie, и я использовал console.log() для возврата данных, хранящихся в cookie, и процесс хранения, похоже, работает. Однако, когда я пытаюсь получить доступ к экрану входа в систему, я все еще могу это сделать.
Поэтому для целей отладки я добавил еще один console.log() для проверки данных, хранящихся в файле cookie, при доступе к странице входа в систему, и он возвращается как неопределенный.
Кто-нибудь знает, в чем проблема в моем коде, из-за которой данные сбрасываются?
function login(email, password, callback) {
return $http.post('/api/v1/auth/login/', {
email: email,
password: password
}).then(function(data, status, headers, config) {
Authentication.setAuthenticatedAccount(data.data);
window.location = '/:username';
}, function (response) {
var response;
response = { success: false, message: 'Username or password is incorrect' };
callback(response);
console.error('Epic failure!');
});
/**
* @name getAuthenticatedAccount
* @desc Return the currently authenticated account
* @returns {object|undefined} Account if authenticated, else `undefined`
* @memberOf hrlite.authentication.services.Authentication
*/
function getAuthenticatedAccount() {
if (!$cookies.authenticatedAccount){
return;
}
return $cookies.getObject('authenticatedAccount');
}
/**
* @name isAuthenticated
* @desc Check if the current user is authenticated
* @returns {boolean} True is user is authenticated, else false.
* @memberOf hrlite.authentication.services.Authentication
*/
function isAuthenticated() {
console.log("account:" getAuthenticatedAccount());
return !!$cookies.authenticatedAccount;
}
/**
* @name setAuthenticatedAccount
* @desc Stringify the account object and store it in a cookie
* @param {Object} user The account object to be stored
* @returns {undefined}
* @memberOf hrlite.authentication.services.Authentication
*/
function setAuthenticatedAccount(account) {
$cookies.putObject('authenticatedAccount', account);
}
Комментарии:
1. какая версия angular? Разве вы не должны использовать
get()
метод в текущих версиях? Не уверен, что$cookies.authenticatedAccount
должен делать, иreturn
сам по себе вернет undefined при вызове функции2. хороший момент.. Я предполагаю, что путаница возникает из-за следования различным руководствам, использующим разные версии angular. Я проведу некоторое исследование текущей версии файлов cookie, соответствующим образом обновлю свой код и свяжусь с вами, если все еще будут проблемы. Спасибо
3. Я думаю, все, что вам нужно сделать, это вернуть
return $cookies.getObject('authenticatedAccount'); || false
4. да, вы правы! это потому, что я не использовал геттеры! большое спасибо!