Enrutador ui angular: la redirección no funciona en absoluto

Estoy usandoui.router para enrutar en mi aplicación Angular. Hay un escenario típico de inicio de sesión, donde estoy redirigiendo a un usuario a la URL de inicio de sesión si no ha iniciado sesión. Sin la biblioteca ui.router, esto funcionó bien usando el evento $ routeChangeStart combinado con$location.path. Ahora estoy usando el$stateChangeStart evento, combinado con$state.go, y la nada funciona! También envía mi navegador a un bucle infinito. Leí de otras fuentes que este es un error conocido, y ninguna de las soluciones sugeridas me funciona. Además,$location.path tampoco redirige a la página de inicio de sesión.

Así es como he configurado mis caminos:

 .config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
    $stateProvider
        .state('main', {
            url: '/',
            templateUrl: 'views/main.html',
            controller: 'MainCtrl'
        })
        .state('about', {
            url: '/about',
            templateUrl: 'views/about.html',
            controller: 'AboutCtrl'
        })
        .state('login', {
            url: '/login',
            templateUrl: 'views/loginform.html',
            controller: 'LoginCtrl'
        });
    $urlRouterProvider.otherwise("/");
}])

Y mirun método:

.run(['$state', '$rootScope', '$location', function($state, $rootScope, $location) {
    //Check when routing starts
    //event, next, current
    $rootScope.$on( '$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
        //Redirect to login if the user is not logged in
        if (!isUserLoggedIn) {

            //Some suggestion
            //e.preventDefault();
            console.log('Not logged in');

            //Infinite loop, kills my browser!
            $state.go('login');
            $state.transitionTo('login');

            //Some suggestion
            $state.go('login', { url: '/login'});

            //Doesn't work
            $location.path('/login');

            //$location.path( $state.href('login');
            console.log('Redirected');
        }
    });

Respuestas a la pregunta(2)

Su respuesta a la pregunta