2016-09-05 4 views
0

я занимаюсь разработкой веб-сайта с помощью angularjs и nodeJS, мой вопрос заключается в том, что, когда это сохранить объект в куках, этот объект не будет еще в печенье, пока я перезагрузить страницу, и это мой кодпеченья удаляется при обновлении страница

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

ответ

2

Печеньки не стираются, это исчезает локальная переменная 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; 
     } 
    } 
}) 

Лично я думаю, что было бы лучше поговорить с вашим сервером и вернуть его пользователю. Куки будут отправляться на сервер, но это дает вашему серверу возможность проверить аутентифицированного пользователя. Он обеспечивает гораздо лучшую защиту против кого-то, кто похищает куки, истекает срок их действия и т. Д.

И прекратите хранение текущего пользователя на $ rootScope. Просто сохраните его в своей локальной переменной, и если кто-то захочет использовать currentUser, он может ввести службу Auth.