如果未经过身份验证,则重定向所有路由以进行登录

stu*_*oid 17 javascript authentication angularjs

如果有人在未经过身份验证时尝试点击任何其他路由,我该如何重定向到登录页面?在AngularJS中有没有"最好"的方法呢?

似乎是一个常见的问题,但我似乎无法找到一种方法来做到这一点.预先感谢您的帮助.

Ror*_*120 21

执行此操作的最佳方法是设置'$ 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');
        }
  });
}])
Run Code Online (Sandbox Code Playgroud)

然后为我们的'authProvider'服务:

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

该解决方案是从一个答案创建这里对堆栈溢出.

谢谢@MohammadAwwaad

  • http://stackoverflow.com/questions/20969835/angularjs-login-and-authentication-in-each-route-and-controller?rq=1 (3认同)