首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >轻松重定向到在Angular中登录?

轻松重定向到在Angular中登录?
EN

Stack Overflow用户
提问于 2016-02-19 06:36:12
回答 1查看 281关注 0票数 0

有没有一种更简单的方法来重定向到login状态,而不需要在每个状态上使用resolve: {}?我的应用程序正在增长,向单个状态添加像loginRequiredskipIfLoggedIn这样的解析会使我的配置块变得混乱。如果有帮助,我将使用Satellizer进行身份验证。

模块路由配置示例:

代码语言:javascript
运行
复制
(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;
        }

    }

})();
EN

回答 1

Stack Overflow用户

发布于 2016-02-19 06:49:19

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

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

代码语言:javascript
运行
复制
   app.state('members', {
     url: '/members',
     controller: 'Home'
     resolve: {
       loginRequired: loginRequired
     }
   }).state('members.profile', {
     url: '/profile',
   });

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35493855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档