AngularJS routeprovider赢得'Don’我什么都不做

AngularJS routeprovider won't do anything

本文关键字:什么 Don 赢得 routeprovider AngularJS      更新时间:2023-09-26

我试图在每次加载页面之前检查他的会话是否处于活动状态,如果不是,则重定向到登录页面。这是我的App.js

var app = angular.module('Test', ['ngRoute']);
app.config(function($routeProvider){
    $routeProvider
        .otherwise({
            resolve:
            {
                "checkUserSession": function($q,$http,$window)
                {
                    console.log('start of the def')
                    var deffered = $q.defer();
                    $http.get('/general/php/getCurrentUser.php')
                        .then(function(result)
                        {
                            if(!result)
                            {
                                deffered.reject();
                                $window.location.href = "/";
                            }
                            else
                            {
                                deffered.resolve();
                            }
                        });
                    $window.location.href = "/";
                    return deffered.promise;
                }
            }
        })
});

它不会执行console.log、$http.get()或任何重定向。不管promise是被解决还是被拒绝,看起来"checkUserSession"永远不会执行;

每一页都包含angular-route.js脚本。

使用拦截器

在我的情况下,我在本地存储中检查身份验证令牌,但您可以在此处使用会话逻辑。

angular.module(...).config-开始

.config(function ($stateProvider, $urlRouterProvider, $httpProvider) {
$httpProvider.interceptors.push('BearerAuthInterceptor');
...

然后使用以下服务:

.factory('BearerAuthInterceptor', function ($q, $injector, $window) {
  return {
    request: function (config) {
        config.headers = config.headers || {};
        var tk = $window.localStorage.getItem('token');
        if (tk) {
            config.headers.Authorization = 'Bearer ' + tk;
        } 
        return config || $q.when(config);
    },
    response: function (response) {
        return response || $q.when(response);
    },
    responseError: function (rejection) {
        if (rejection.status === 401) {
    // Redirect to login ui-route
            $injector.get('$state').go('login');
        }
        return $q.reject(rejection);
    }
  };
})

这里有一些很好的例子:http://www.webdeveasy.com/interceptors-in-angularjs-and-useful-examples/