Данные cookie AngularJS возвращаются как неопределенные после обновления страницы

#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. да, вы правы! это потому, что я не использовал геттеры! большое спасибо!