У меня есть приложение Angular, использующее UI-маршрутизатор, где я пытаюсь проверить токен пользователя, если он существует, когда приложение запускается. Я также проверяю, что у пользователя есть разрешение на доступ к сертификационным маршрутам. Проблема в том, что $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 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
только после того, как ответ от конечной точки auth был возвращен. Это нужно только в первый раз. Каждое последующее изменение состояния может быть выполнено без попадания конечной точки auth.