Angular UI-маршрутизатор, использующий проверку подлинности проверки подлинности

Я пытаюсь понять, как лучше всего проверить, аутентифицирован ли пользователь в приложении.

Сейчас я использую следующее:

  1. Пользователь входит в приложение
  2. На стороне сервера создается токен и отправляется обратно в браузер.
  3. При успешном входе в систему AngularJS сохраняет токен: $http.defaults.headers.common['RequestVerificationToken'] = token || $cookies.token;
  4. При каждом HTTP-запросе на сервер отправляется Токен и проверяется на стороне сервера. В случае, если токен не существует, клиенту отправляется состояние ответа 401.

Это работает очень хорошо, теперь я использую UI-Router для управления состояниями приложения (страницы - реальный сценарий):

У меня следующее состояние:

$stateProvider
    .state('personinfo', {
      url: "/personinfo",
      controller: 'PersonController',
      templateUrl: "app/partials/personinfo.html"

    })

Внутри моего PersonContoller:

app.controller('PersonController', function ($scope,$sce, $location, PersonService) {

    $scope.title = 'Person Page';

    PersonService.getPersons().success(function (response) {
        $scope.persons = response.success;
    }).error(function () {
        // If token doesn't exist, a 401 reponse status is sent by server
        $location.url('/login');
    });

});

Мне не очень нравится, как это работает, потому что AngularJS загрузит состояние и загрузит частичный HTML-файл, а затем перейдет в контроллер и выполнит метод get, и если токен недействителен, то он будет перенаправлен на состояние входа.

Я хотел бы проверить токен перед загрузкой состояния, поэтому, если токен недействителен, частичный HTML не будет загружен или что-то еще.

Я читал, что UI-Router имеет свойство разрешения, которое можно использовать для получения данных до загрузки представления... могу ли я использовать разрешение для проверки токена?

Надеюсь, кто-то может дать мне руководство или совет.

Большое спасибо.


person VAAA    schedule 11.03.2014    source источник
comment
Нашел это: bfcamara.com/post/66001429506/ Попытаюсь проверить, работает ли это   -  person VAAA    schedule 11.03.2014


Ответы (1)


Ваш стек сборки должен компилировать производственный JS со встроенным шаблоном, поэтому вам не о чем беспокоиться.

Если вы действительно хотите перехватить начальную загрузку страницы, поэкспериментируйте с $locationChangeSuccess, который запускается перед первым $routeChangeStart.

Если вы хотите подключиться к разрешению, просто прикрепите к нему обещание.

person event_jr    schedule 23.05.2014