使用ui-router
时,有没有办法根据Cookie中的数据将用户重定向到特定状态?
我试图从.config()
开始,但由于我无法注入其他依赖项,因此无法正常工作。
我也尝试在.run()
块上执行此操作,但它只是给出一个循环(当然)。
这是我在.config()
function ConfigRouter($locationProvider, $stateProvider, $urlRouterProvider, Constant, localStorageService) {
$locationProvider.html5Mode(true);
$urlRouterProvider.when('/', function($injector) {
var $state = $injector.get('$state');
checkState($state);
});
$urlRouterProvider.when('', function($injector) {
var $state = $injector.get('$state');
checkState($state);
});
$urlRouterProvider.otherwise(function($injector) {
var $state = $injector.get('$state');
$state.go('error');
});
function checkState($state) {
var userCookie = localStorageService.cookie.get(Constant.cookieName);
if(userCookie.type == 1) {
$state.go('home-app');
} else if (userCookie.type == 2) {
$state.go('home-client');
} //and so on
}
}
有办法吗?或者以其他方式实现相同的结果?基本上我需要根据用户角色将用户发送到应用程序的不同部分。如果他是管理员,客户,主持人等。每个人都有一个特定的应用程序,需要从服务器检索特定数据,这就是为什么我想这样做,所以我可以请求关于每个州的解决方案的数据。
答案 0 :(得分:1)
如果您使用的是角度ui路由器,则可以在顶级状态下使用v=spf1 include:spf.protection.outlook.com a:mailman1-eqix-sjo.packet8.net a:mailman1-eq.packet8.net a:my.server.hostname -all
,您可以在其中注入可帮助您验证cookie的服务
您也可以在
期间拦截并执行此操作resolve
更多信息https://github.com/angular-ui/ui-router/wiki#resolve
和这里的例子 angular ui-router login authentication
Defer Angular UI Router $stateChangeStart until server authorization response receieved
EJ:
.run(["$rootScope", "$location", "$state", "services.userService", function ($rootScope, $location, $state) {
$rootScope.$on('$stateChangeStart', function (e, toState, toParams
, fromState, fromParams) {
// validation
});
答案 1 :(得分:0)
我在.run部分做了用户检查:
.run(['$rootScope', '$state', '$cookies',
function ($rootScope, $state, $cookies) {
if ($cookies.get('token'))
$state.go('main');
else
$state.go('guest)
}]);
当然,应该安装“令牌”#39;在cookie中。现在你在.config
中不需要$ urlRouterProvider