AngularJs没有重定向

时间:2016-05-21 00:00:14

标签: angularjs angular-ui-router

添加后出于某种原因:

            .state('root', {
                abstract: true,
                url: '',
                views: {
                    'layout': {
                        templateUrl: '../views/layout.html'
                    },
                    'header@root': {
                        templateUrl: '../views/shared/header.html'
                    },
                    'footer@root': {
                        templateUrl: '../views/shared/footer.html'
                    }
                }
            })

如果用户未登录,它将停止重定向。

这是完整的代码:

angular
    .module('authApp', ['ui.router', 'ui.bootstrap', 'ngAnimate', 'satellizer', 'smart-table'])
    .config(function ($stateProvider, $urlRouterProvider, $authProvider, $httpProvider, $provide) {

        function redirectWhenLoggedOut($q, $injector) {

            return {

                responseError: function (rejection) {

                    // Need to use $injector.get to bring in $state or else we get
                    // a circular dependency error
                    var $state = $injector.get('$state');

                    // Instead of checking for a status code of 400 which might be used
                    // for other reasons in Laravel, we check for the specific rejection
                    // reasons to tell us if we need to redirect to the login state
                    var rejectionReasons = ['token_not_provided', 'token_expired', 'token_absent', 'token_invalid'];

                    // Loop through each rejection reason and redirect to the login
                    // state if one is encountered
                    angular.forEach(rejectionReasons, function (value, key) {

                        if (rejection.data.error === value) {

                            // If we get a rejection corresponding to one of the reasons
                            // in our array, we know we need to authenticate the user so 
                            // we can remove the current user from local storage
                            localStorage.removeItem('user');

                            // Send the user to the auth state so they can login
                            $state.go('root.login');
                        }
                    });

                    return $q.reject(rejection);
                }
            }
        }

        // Setup for the $httpInterceptor
        $provide.factory('redirectWhenLoggedOut', redirectWhenLoggedOut);

        // Push the new factory onto the $http interceptor array
        $httpProvider.interceptors.push('redirectWhenLoggedOut');

        $authProvider.loginUrl = '/api/authenticate';


        $urlRouterProvider.otherwise('/login');

        $stateProvider
            .state('root', {
                abstract: true,
                url: '',
                views: {
                    'layout': {
                        templateUrl: '../views/layout.html'
                    },
                    'header@root': {
                        templateUrl: '../views/shared/header.html'
                    },
                    'footer@root': {
                        templateUrl: '../views/shared/footer.html'
                    }
                }
            })
            .state('root.login', {
                url: '/login',
                templateUrl: '../views/authView.html',
                controller: 'AuthController as auth'
            })
            .state('root.account', {
                url: '/account',
                templateUrl: '../views/account.html',
                controller: 'UserController as user'
            })
            .state('root.dashboard', {
                url: '/dashboard',
                templateUrl: '../views/dashboard.html',
                controller: 'UserController as user'
            })
            .state('root.report', {
                url: '/report',
                templateUrl: '../views/account.html',
                controller: 'UserController as user'
            });
    })
    .run(function ($rootScope, $state, $location) {

        // $stateChangeStart is fired whenever the state changes. We can use some parameters
        // such as toState to hook into details about the state as it is changing
        $rootScope.$on('$stateChangeStart', function (event, toState) {

            // Grab the user from local storage and parse it to an object
            var user = JSON.parse(localStorage.getItem('user'));

            // If there is any user data in local storage then the user is quite
            // likely authenticated. If their token is expired, or if they are
            // otherwise not actually authenticated, they will be redirected to
            // the auth state because of the rejected request anyway
            if (user) {
                // The user's authenticated state gets flipped to
                // true so we can now show parts of the UI that rely
                // on the user being logged in
                $rootScope.authenticated = true;

                // Putting the user's data on $rootScope allows
                // us to access it anywhere across the app. Here
                // we are grabbing what is in local storage
                $rootScope.currentUser = user;

                // If the user is logged in and we hit the auth route we don't need
                // to stay there and can send the user to the main state
                if (toState.name === "root.login") {
                    // Preventing the default behavior allows us to use $state.go
                    // to change states
                    event.preventDefault();

                    // go to the "main" state which in our case is dashboard
                    $state.go('root.dashboard');
                }
            }
        });
    });

1 个答案:

答案 0 :(得分:0)

我已添加:

else{
                        // go to the "login" state
                        $state.go("root.login");
                        event.preventDefault();
                    }

if (user) {}