Подтвердить что ты не робот

Перенаправление по всем маршрутам для входа в систему, если не аутентифицировано

Как я могу перенаправить на страницу входа, если кто-то пытается ударить по любому другому маршруту, когда они не прошли проверку подлинности? Есть ли "лучший" способ сделать это в AngularJS?

Похоже на общую проблему, но я не могу найти способ сделать это. Заранее благодарю вас за помощь.

4b9b3361

Ответ 1

Лучший способ сделать это - настроить прослушиватель '$ routeChangeStart', который проверяет функцию сервиса authProvider, чтобы проверить, что вошел пользователь. В нашем "app.js" или в отдельном файле:

angular.module('myApp')
     .run(['$rootScope', '$location', 'authProvider', function ($rootScope, $location,     authProvider) {
        $rootScope.$on('$routeChangeStart', function (event) {

        if (!authProvider.isLoggedIn()) {
          console.log('DENY : Redirecting to Login');
          event.preventDefault();
          $location.path('/login');
        }
        else {
          console.log('ALLOW');
        }
  });
}])

Затем для нашей службы authProvider:

angular.module('myApp')
  .factory('authProvider', function() {
    var user;
      return {
        setUser : function(aUser){
          user = aUser;
        },
        isLoggedIn : function(){
          return(user)? user : false;
        }
      };
  });

Это решение было создано из ответа здесь на переполнение стека.

Спасибо @MohammadAwwaad

Ответ 2

Я делаю это по-другому, используя Node.js и Express и модуль passport, но до этого, когда я использовал PHP, я сделал это с несколькими модулями Angular. У меня был внешний модуль в теге <html> с ng-app, затем ng-controller в определенных тегах, например <body> и некоторых <div> s. В одном из этих ng-controller s у меня была функция проверки подлинности, тогда у меня был ng-if для входа, выхода из системы и т.д. Если пользователь не вошел в систему, я спрятал текущую страницу и ng-include d соответствующую страницу, В противном случае я ng-include d текущая страница.

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