Ionic ui-router onEnter check throw errors at 2nd time around

So I have this very strange error: I want to check if a user is login when enter a state and redirect them back to SignIn page if they are not. So in my config I have:

.state('home', {
  cache: false,
    abstract: true,
    url: "/home",
    templateUrl: "app/home/home.html",
  onEnter: function($state, MyFirebaseService) {
    // check session
    var userId = MyFirebaseService.LoginUserId();
    if (!userId) {
      $state.go('auth.signin')
    };
  }
})

So I type in http://localhost:8100/#/home/courses to go into courses page without login, everything work perfectly. User got redirect back to auth.signin view. But when I type in the address bar again http://localhost:8100/#/home/courses, it throw 4 errors:

TypeError: Cannot read property '@' of null
TypeError: Cannot read property 'auth-signin@auth' of null
TypeError: Cannot read property 'auth-signup@auth' of null

My signin and signup are in an abstract view call auth. Why is that and how to fix it?

I personnaly perform those actions of authenticatio ncontrol on .run( with event catcher :

  .run([
          '$rootScope','authService','$q',
          function($rootScope, authService,q) {

            $rootScope.$on('$stateChangeStart', function(event, next, current) {

// YOUR CONTROL & REDIRECT
        });
}]);

If you add some authorisation role control for instance on ui-router, for instance:

.state('home', {
                  url: "/home",
                  templateUrl: "includes/pages/homePage.html",
                  resolve : {
                    authorizedRoles :  function(){ return [ USER_ROLES['su'],
                               USER_ROLES['user'],
                               USER_ROLES['admin'],
                               USER_ROLES['skyadmin'],
                               USER_ROLES['skyuser'],
                               USER_ROLES['skysu']
                               ] } 

                  }

                })

You can easily check into $stateChangeStart with var authorizedRoles = next.resolve.authorizedRoles(); and compare them with your user roles