cookie在angularJS

时间:2016-07-28 07:25:11

标签: angularjs cookies

角度Cookie过期后如何将用户重定向到登录页面?但是我使用过angualrJS和ngCookies cookies将在一分钟后到期,如下所示

$cookiesProvider.defaults.expires = new Date(now.setMinutes(now.getMinutes() + 1));`

我应该使用$ watch功能,如下所示:

$rootScope.$watchCollection($cookies.getObject('user'), function (newVal, oldval) {

       if (newVal != oldval) {
           $rootScope.$broadcast(AuthStatus.session_timeout);
           //console.log(newVal, oldval);
        } else {
           //console.log(newVal, oldval);
       }`

2 个答案:

答案 0 :(得分:1)

我猜这是一个身份验证cookie。因此,最好在检查使用cookie时的到期时间。由于性能的原因,滥用观察者并不是一个好主意。

您可以使用拦截器执行此操作,例如:

angular.module('myModule')
.config(function($httpProvider) {
     $httpProvider.interceptors.push('CookieInterceptor')
})
.factory('CookieInterceptor', function() {
     return {
          'request': function(config) {
                // check if your cookie has expired and
                // $window.location.href = '/login'
          }
     }
});

如果不在SPA上,请在服务器端执行重定向。

答案 1 :(得分:0)

你应该使用ui-router模块。

注入你的代码$ state并在if。

中添加这一行
if (newVal != oldval) {
   $rootScope.$broadcast(AuthStatus.session_timeout);
   $state.go('login');
   //console.log(newVal, oldval);
}

在你的main.js中导入模块ui-router并定义上面的状态togheter与应该遵循的路径。

$stateProvider
.state('login', {
    url: '/login',
    templateUrl: 'login.html',
    controller: 'loginCtrl'
})
.state('somethingElse', {
    url: '/somethingElse',
    templateUrl: 'somethingElse.html',
    controller: 'somethingElseCtrl'
});

$urlRouterProvider.otherwise('/somethingElse');