0

有没有更简单的方法来重定向到login状态而不使用resolve: {}每个状态?我的应用程序正在增长,并且添加类似loginRequired或添加skipIfLoggedIn到单个状态的解析使我的配置块变得混乱。如果有帮助,我正在使用 Satellizer 进行身份验证。

示例模块路由配置:

(function () {

    'use strict';

    angular
        .module('uberCoolModule')
        .config(configRoutes);

    configRoutes.$inject = ['$stateProvider'];
    function configRoutes ($stateProvider) {

        $stateProvider

            .state('login', {
                url         : '/login',
                templateUrl : 'entrance/login/login.html',
                data        : { pageTitle: 'Login' },
                resolve: {
                    skipIfLoggedIn: skipIfLoggedIn
                }
            })
            .state('logout', {
                url         : '/logout',
                controller  : 'Logout'
                resolve: {
                    loginRequired: loginRequired
                }
            })
            .state('members', {
                url         : '/members',
                controller  : 'Home'
                resolve: {
                    loginRequired: loginRequired
                }
            });

        function skipIfLoggedIn($q, $auth) {
            var deferred = $q.defer();
            if ($auth.isAuthenticated()) {
                deferred.reject();
            } else {
                deferred.resolve();
            }
            return deferred.promise;
        }

        function loginRequired($q, $location, $auth) {
            var deferred = $q.defer();
            if ($auth.isAuthenticated()) {
                deferred.resolve();
            } else {
                $location.path('/login');
            }
            return deferred.promise;
        }

    }

})();
4

1 回答 1

1

最简单的方法是拥有一个包含授权解析的父状态,并使所有需要登录的状态成为该父状态的子状态。

如果其任何祖先状态的解析被拒绝,则无法访问子状态

   app.state('members', {
     url: '/members',
     controller: 'Home'
     resolve: {
       loginRequired: loginRequired
     }
   }).state('members.profile', {
     url: '/profile',
   });

在这个例子中,如果被拒绝,/members/profile将会失败loginRequired

于 2016-02-18T22:49:19.197 回答