Angular $cookies не сохраняются

Я использую angular $resource для доступа к API. В этом конкретном случае с пользовательским действием входа в систему, чтобы войти в систему пользователя.

Чтобы сохранить токен, предоставленный API после аутентификации, я прикрепляю перехватчик к пользовательскому действию входа в систему, который просто сохраняет токен в файле cookie через $cookies.

Я использую перехватчик, так как мне нужно будет сохранять и обновлять этот файл cookie из других частей приложения.

Проблема в том, что файл cookie не сохраняется.

Если я проверю значение сразу после сохранения, я могу подтвердить, что оно там, но как только мое $location изменится (например, при отображении домашней страницы после входа в систему), файл cookie исчезнет.

Любые идеи?

Спасибо д.

Вот моя служба входа в систему, которая использует пользовательское действие входа и перехватчик

(function() {
    'use strict';

    //Login Service
    // Authenticates a user
    angular
    .module('console')
    .factory('LoginService', LoginService);    
        LoginService.$inject = ['$resource', 'Config', 'UserInfoInterceptor'];

            function LoginService($resource, Config, UserInfoInterceptor) {

                return $resource(Config.api_url + '/auth/', {},
                    {
                        login: {
                        method: 'POST',
                        url: Config.api_url + '/auth/login',
                        data: {type: "passwd"},
                        interceptor: UserInfoInterceptor,
                        headers: {
                        "accept": "application/json",
                        "content-Type": "application/json;odata=verbose"
                    }
                }
            });
    }
})();

А вот и перехватчик (там console.log, на самом деле записывает значение куки), но он теряется сразу после перехода в другое место.

(function() {
  'use strict';

  angular
    .module('console')
    .factory('UserInfoInterceptor', UserInfoInterceptor);
    UserInfoInterceptor.$inject = ['$resource', 'Config', '$q', '$location', '$cookies'];


    function UserInfoInterceptor($resource, Config, $q, $location, $cookies) {    

        return {

                // Save the received token 
                'response': function (response) {

                    var now = new Date();
                    // this will set the expiration to 30 days
                    var exp = new Date(now.getFullYear(), now.getMonth()+1, now.getDate());

                    // Set the cookie
                    $cookies.put('token', response.data.token, {expires: exp});

                    //This actually works!!
                    console.log($cookies.get('token'));

                    return response;
                },

                // Whatever is the failure, throw the user to the login page
                'responseError': function (response) {
                    if (response.status === 401 || response.status === 403) {
                        $location.path('/login');
                    }
                    return $q.reject(response);
                }
            };    
    }

person afterxleep    schedule 11.03.2016    source источник


Ответы (1)


Это слишком поздно, но это исправление может помочь и другим, я думаю.

Я попытался установить путь к файлам cookie в $cookiesProvider, как показано ниже,

xxApp.config(['$cookiesProvider', function ($cookiesProvider) {
     $cookiesProvider.defaults.path = '/'; 
}]);
person Thaadikkaaran    schedule 13.06.2016
comment
никогда не поздно - person AlainIb; 13.06.2016