0

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

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

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

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

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

Любые идеи?

Спасибо, D.

Вот мой Логин Сервис, который использует действие пользовательского входа и перехватчик

(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); 
       } 
      };  
    } 

ответ

1

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

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

xxApp.config(['$cookiesProvider', function ($cookiesProvider) { 
    $cookiesProvider.defaults.path = '/'; 
}]); 
+0

это никогда не слишком поздно – AlainIb