Отложить Angular UI Router $ stateChangeStart до получения ответа на авторизацию сервера
У меня есть приложение Angular, использующее UI Router, где я пытаюсь проверить токен пользователя, если он существует, при запуске приложения. Я также проверяю, что у пользователя есть разрешение на доступ к определенным маршрутам. Проблема в том, что$stateChangeStart
выполняется до того, как я получу ответ от конечной точки авторизации. Вот некоторый код (coffeescript с JS ниже) - это все в моемrun
блок.
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
)
Мой вопрос, как я могу получить$stateChangeStart
запускаться только после того, как ответ от конечной точки аутентификации был возвращен. Это должно произойти только в первый раз. Каждое последующее изменение состояния может быть выполнено без попадания в конечную точку аутентификации.