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

时间:2014-10-01 16:16:41

标签: javascript angularjs authentication

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

似乎是一个常见的问题,但我似乎找不到办法来做到这一点。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:20)

最好的方法是设置一个' $ 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;
        }
      };
  });

此解决方案是根据堆栈溢出的答案here创建的。

谢谢@MohammadAwwaad

答案 1 :(得分:0)

我现在以不同的方式做这件事,使用Node.js&amp;快递&amp; passport模块,但在此之前,当我使用PHP时,我使用了几个Angular模块。我的<html>标记上有一个外部模块ng-app,然后ng-controller处于某些标记,例如<body>&amp;某些<div> s。在其中一个ng-controller中,我有一个身份验证功能,然后我有一个ng-if用于登录,注销等。如果用户没有登录,我隐藏了当前页面{{1适当的页面。否则,我ng-include d当前页面。

这可能不是最好的解决方案,但我不想使用第三方模块。如果你感到困惑或有任何疑问(我知道我很困惑),请问。