轻松重定向到Angular登录?

时间:2016-02-18 22:36:12

标签: angularjs satellizer

是否有更简单的方法可以在不使用login的情况下重定向到resolve: {}状态?我的应用程序正在增长,并向个别状态添加loginRequiredskipIfLoggedIn等结果会使我的配置块混乱。如果有帮助,我会使用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;
        }

    }

})();

1 个答案:

答案 0 :(得分:1)

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

如果其中任何一个祖先状态被拒绝,则无法访问子状态

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

在此示例中,如果/members/profile被拒绝,转到loginRequired将会失败

相关问题