Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS UI路由器未在未经授权的解析呼叫上路由_Angularjs_Angular Ui Router - Fatal编程技术网

AngularJS UI路由器未在未经授权的解析呼叫上路由

AngularJS UI路由器未在未经授权的解析呼叫上路由,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我有一个仪表板应用程序用户需要登录。如果您进入登录页面,然后登录并进入仪表板,则一切正常。我的问题是,当有人试图在登录前点击仪表板视图时。它识别出解析调用是未经授权的,但它从不转换到登录页面 $stateProvider .state('login', { url: '/login', templateUrl: 'login/login.html', controller: 'LoginCtrl',

我有一个仪表板应用程序用户需要登录。如果您进入登录页面,然后登录并进入仪表板,则一切正常。我的问题是,当有人试图在登录前点击仪表板视图时。它识别出解析调用是未经授权的,但它从不转换到登录页面

$stateProvider
        .state('login', {
            url: '/login',
            templateUrl: 'login/login.html',
            controller: 'LoginCtrl',
            authenticate: false
        })
        .state('dashboard', {
            url: '/dashboard',

            views: {
                '': {
                    templateUrl: 'dashboard/dashboard.html',
                    controller: 'DashboardCtrl'
                },
                'current-status-module@dashboard': {
                    templateUrl: 'current-status/current-status.html'
                },
                'alerts-module@dashboard': {
                    templateUrl: 'alerts/alerts.html',
                    controller: 'AlertCardsCtrl',
                    resolve: {
                        ZonesService: 'ZonesService',
                        userZones: function (LoginService, ZonesService, $stateParams) {
                            return ZonesService.query({zoneId: $stateParams.zoneId}).then(function(data){
                                return data;
                            });
                        }
                    }
                },
                'alert-cards-module@dashboard': {
                    templateUrl: 'alerts/alert-cards/alert-cards.html'
                },
                'zones-module@dashboard': {
                    templateUrl: 'zones/zones.html'
                },
                'map-grid-module@dashboard': {
                    templateUrl: 'zones/zone-map/zone-map.html'
                }
            },
            authenticate: true
        })




.factory('LoginService', function ($window, $http, $q, $state, ENV) {
    return {
        login: function (username, password) {
            var deferred = $q.defer();
            $http.post(ENV.web_api_url + ENV.api_version + '/login', {}, {
                "headers": {
                    "X-Auth-Username": username,
                    "X-Auth-Password": password
                }
            }).success(function (data) {
                $window.sessionStorage.token = data.token;
                deferred.resolve(data);
                $state.transitionTo("dashboard");
            }).error(function (error) {
                deferred.reject(error);
            });
            return deferred.promise;
        },
        isAuthenticated: function () {
            //==TODO: Call endpoint to check auth token
            return true;
        },
        isRestricted: function () {
            return ENV.is_restricted;
        },
        logout: function (error) {
            // User isn’t authenticated
            $window.sessionStorage.notification = "Authenticated session has expired. Please log in again.";
            $window.sessionStorage.notifyAlert = 'show';
            $window.location = ENV.location_path_home;
        }
    }
});


.run(function ($window, $rootScope, $state, LoginService) {
    $rootScope.$on("$stateChangeStart", function (event, toState, toParams, fromState, fromParams) {
        $rootScope.user = angular.fromJson($window.sessionStorage.user);
        $rootScope.loggedIn = $window.sessionStorage.loggedIn;

        if (toState.authenticate && !LoginService.isAuthenticated()) {
            // User isn’t authenticated
            $state.transitionTo("login");
            event.preventDefault();
        }

        if (toState.restricted && LoginService.isRestricted()) {
            console.log("restricted...")
            // Action is restricted to user
            $rootScope.selectedIndex = 0;
            event.preventDefault();
        }
    });
});

此条件不会为真:(toState.authenticate&!LoginService.isAuthenticated())


因为在LoginService.isAuthenticated()中总是返回true。因此,$state.transitiono(“login”)永远不会执行。

此条件不会为真:(toState.authenticate&&!LoginService.isAuthenticated())

因为在LoginService.isAuthenticated()中总是返回true。因此,$state.transitiono(“login”)永远不会被执行