有没有一种更简单的方法来重定向到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;
}
}
})();发布于 2016-02-19 06:49:19
最简单的方法是拥有一个包含授权解析的父状态,并使所有需要登录的状态都成为该父状态的子状态。
如果子状态的任何祖先状态的解析被拒绝,则无法访问子状态
app.state('members', {
url: '/members',
controller: 'Home'
resolve: {
loginRequired: loginRequired
}
}).state('members.profile', {
url: '/profile',
});在此示例中,如果loginRequired被拒绝,则转到/members/profile将失败
https://stackoverflow.com/questions/35493855
复制相似问题