$ rootScope。$ on($ stateChangeStart)如果基本网址命中,则重定向到登录页面

时间:2016-10-09 16:24:57

标签: angularjs ionic-framework angular-ui-router

我在离子移动应用程序中使用角度 ui-router angular-cookies 进行身份验证。 这是我的州

    .config(function ($stateProvider, $urlRouterProvider) {
    $stateProvider
      .state('login', {
        url: '/login',
        templateUrl: 'templates/login.html',
        controller: 'LogInCtrl'
      })
      .state('app', {
        url: '/app',
        abstract: true,
        templateUrl: 'templates/menu.html',
        controller: 'AppCtrl'
      })

      .state('app.search', {
        url: '/search',
        views: {
          'menuContent': {
            templateUrl: 'templates/search.html'
          }
        }
      })

      .state('app.browse', {
        url: '/browse',
        views: {
          'menuContent': {
            templateUrl: 'templates/browse.html'
          }
        }
      })
      .state('app.playlists', {
        url: '/playlists',
        views: {
          'menuContent': {
            templateUrl: 'templates/playlists.html',
            controller: 'PlaylistsCtrl'
          }
        }
      })

      .state('app.single', {
        url: '/playlists/:playlistId',
        views: {
          'menuContent': {
            templateUrl: 'templates/playlist.html',
            controller: 'PlaylistCtrl'
          }
        }
      });
    // if none of the above states are matched, use this as the fallback
    $urlRouterProvider.otherwise('/login');
  });

这是我的运行方法代码

$rootScope.globals = $cookieStore.get('globals') || {};
    if ($rootScope.globals.currentUser) {
      $http.defaults.headers.common['Authorization'] = 'Basic ' + $rootScope.globals.currentUser.authdata; // jshint ignore:line
    }

    $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
      // redirect to login page if not logged in
        var shouldLogin = typeof $rootScope.globals.currentUser == 'undefined';

        // NOT authenticated - wants any private stuff
        if(shouldLogin || fromState.name === "") {
            var token = $rootScope.globals.currentUser == undefined ? null : $rootScope.globals.currentUser;
            if (token == null) {
                if(toState.name === 'login')
                    return;
                $state.go('login');
                event.preventDefault();
            } else {
                if(toState.name === toState.name)
                    return;
                //TODO: Check token
                $state.go(toState.name);
                event.preventDefault();
            }
        }
    });

身份验证工作正常,但当我将我的网址更改为 http://localhost:8100/ 时,它会重定向到登录页面,但会显示转到播放列表页面。需要帮助我做错了。

1 个答案:

答案 0 :(得分:0)

您的网页被重定向到基本网址,因为:

$urlRouterProvider.otherwise('/login');

没有为/定义状态,因此路由器会遇到otherwise条件并重定向到/login