angularjs http拦截器在加载的位置路径上显示错误

时间:2016-06-15 00:51:02

标签: angularjs angular-http-interceptors

我有一个应用程序,我在15分钟不活动后创建了一个拦截器来处理令牌过期,它在令牌过期后成功重定向到登录页面,但是在重定向到登录页面后我无法显示错误。

我的问题是,在拦截器将应用程序重定向到该页面后,如何在登录页面上向用户显示令牌过期错误。

继承我的重定向器:

    app
    .config(['$httpProvider', function($httpProvider) {
        $httpProvider.interceptors.push(function($q, $location, LoopBackAuth) {
            return {
                responseError: function(rejection) {
                    if (rejection.status == 401) {
                        //Now clearing the loopback values from client browser for safe logout...
                        LoopBackAuth.clearUser();
                        LoopBackAuth.clearStorage();
                        $location.path("/login");
                    }
                    return $q.reject(rejection);
                }
            };
        })
    }])
    .config(function(LoopBackResourceProvider) {    
        LoopBackResourceProvider.setAuthHeader('X-Access-Token');
    })

2 个答案:

答案 0 :(得分:0)

最后,感谢@forrestmid指出我正确的方向,这就是我最终做的事情。

在http拦截器上添加了:

$location.path("/login").search({error: 'invalid_token'});

然后在控制器上必须做:

var queryString = $location.search();
$scope.errors = {};
if (queryString && queryString.error) {
    $scope.errors = {
        'invalid_token': {
            code: 'invalid_token'
        }
    }
}

现在在模板上我已经有了处理错误对象的逻辑,所以现在它工作正常:)

答案 1 :(得分:0)

引用this post关于将$ state服务注入HTTP拦截器:

app.config(['$httpProvider', function($httpProvider) {
    $httpProvider.interceptors.push(function($q, $injector, LoopBackAuth) {
        return {
            responseError: function(rejection) {
                if (rejection.status == 401) {
                    //Now clearing the loopback values from client browser for safe logout...
                    LoopBackAuth.clearUser();
                    LoopBackAuth.clearStorage();
                    $injector.get('$state').go('app.login', {error: 'Token expired.'});
                }
                return $q.reject(rejection);
            }
        };
    })
}]);

假设你正在使用ui.router:

app.config(function($stateProvider){
    $stateProvider
       .state("app",{abstract: true})
       .state("app.login", {
           url: "/login",
           params: {error: ""}
       });
});

默认情况下,转换到app.login状态时不会出现错误,但是当有任何参数错误设置时,它会显示错误。这将位于登录页面上的$stateParams.error变量中。

如果我没有测试任何代码,请告诉我。我认为你想要的是$ injector线。