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.