ui-router $ state.go基于用户co​​okie

时间:2016-04-14 18:50:45

标签: angularjs angular-ui-router

使用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
    }

}

有办法吗?或者以其他方式实现相同的结果?基本上我需要根据用户角色将用户发送到应用程序的不同部分。如果他是管理员,客户,主持人等。每个人都有一个特定的应用程序,需要从服务器检索特定数据,这就是为什么我想这样做,所以我可以请求关于每个州的解决方案的数据。

2 个答案:

答案 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