AngularJS routeprovider不会做任何事情

时间:2016-05-13 10:08:32

标签: javascript angularjs

如果他的会话处于活动状态,我试图在每个页面加载之前检查,如果没有,则重定向到登录页面。 这是我的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()或任何重定向。 如果承诺得到解决或拒绝并不重要,它看起来像是" checkUserSession"永远不会执行;

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

1 个答案:

答案 0 :(得分:0)

使用拦截器。

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

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/