Aplazar Angular UI Router $ stateChangeStart hasta que se reciba la respuesta de autorización del servidor

Tengo una aplicación Angular que utiliza el Enrutador UI donde intento validar el token de un usuario, si existe, cuando se ejecuta la aplicación. También estoy comprobando que el usuario tenga permiso para acceder a ciertas rutas. El problema es ese$stateChangeStart se está ejecutando antes de recibir la respuesta del punto final de autorización. Aquí hay algo de código (coffeescript con js abajo) - esto es todo dentro de mirun bloquear.

app.run(($rootScope, $state, $stateParams, $log, Auth) ->

  currentState = 'home'

  $rootScope.$state = $state

  # read a cookie if cookie exists
  if Auth.setAuthenticationToken()
    # hit api endpoint to validate token
    Auth.validateToken (user) ->
      # route to current state
      # this returns after $stateChangeStart runs below
      $state.go(currentState)

  $rootScope.$on '$stateChangeStart', (event, toState, toParams, fromState, fromParams) ->

    currentState = toState.name

    Auth.setAuthenticationToken()

    $rootScope.error = null

    # compare users access permissions with incoming route's access level
    if (!Auth.authorize toState.data.access, Auth.user)
      event.preventDefault()
      $rootScope.error = "Sorry, you haven't provided the required credentials."
      $log.warn $rootScope.error
)

Mi pregunta es ¿cómo puedo obtener el$stateChangeStart para ejecutarse solo después de que se haya devuelto la respuesta del punto final de autenticación. Esto solo tiene que pasar la primera vez. Cada cambio de estado posterior se puede hacer sin llegar al punto final de autenticación.

Respuestas a la pregunta(4)

Su respuesta a la pregunta