обработка ошибок 4xx, плюс вход в систему при использовании uiRouter

0

Ну, я родом из ngRoute, и я только начал изучать uiRouter.

Я использовал два разных угловых приложения для входа в систему (login.html) и один для основного приложения (index.html). В нем я просто проверяю, аутентифицирован ли пользователь, а затем перенаправляет их на index.html, иначе на login.html.

Теперь я хочу инкапсулировать вход в основное приложение. У меня много состояний, требующих входа пользователя. Во многих из них исправлены некоторые части, такие как верхний и нижний колонтитулы. Я ищу конкретное решение, чтобы справиться с этим соображениями:

  • Я не хочу использовать свойство resolve для всех состояний, которым требуется аутентификация.
  • Я не хочу, чтобы мои маршруты были как /some-prefix-for-authed-paths/... для состояний, требующих аутентификации.
  • Если кто-то переходит к маршруту, требующему аутентификации, я хочу перенаправить их на страницу входа в систему, и после входа в систему я хочу перенаправить их обратно туда, где они были.
  • для ошибок 4xx я хочу отобразить страницу пользовательских ошибок (возможно, зависящую от маршрута). Например, если кто-то перемещается в /users/3, и нет пользователя 3 (который будет определяться свойством разрешения состояния, которое будет отклонено в случае отсутствия существующего пользователя), я хочу показать им страницу с ошибкой, но я НЕ хочу менять маршрут на что-то вроде /error чего-то, потому что на самом деле это не имеет смысла! Кроме того, я не хочу, чтобы в браузере происходило состояние.
Теги:
angular-ui-router

1 ответ

0

Вы можете попытаться реализовать httpInterceptor, который ловит все запросы без 2xx и перенаправляет на какую-то страницу ошибки/входа.

Также для проверки подлинности вы можете использовать событие uiRouter onStateChange, добавив уровень доступа к своим состояниям

.state('someState', {
    url: '/someUrl',
    isPrivate: true
})

$rootScope.$on('$stateChangeStart', 
    function(event, toState, toParams, fromState, fromParams){ 
        event.preventDefault(); 

        // Check if state is private
        if(toState.isPrivate) {
              // Do something
        }
});

Заметка! Это всего лишь несколько псевдокодов

  • 0
    Спасибо, но, как я уже упоминал, я не хочу перенаправлять в случае ошибки.
  • 0
    Ой, извини. Конечно, вам не нужно перенаправлять, когда эти события происходят. Вы можете инициировать другое событие с помощью $ rootScope. $ Broadcast () и иметь некоторую директиву, слушающую это и соответствующим образом управляющую DOM.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню