AngularJS重定向授权

时间:2015-05-30 03:46:45

标签: jquery angularjs firebase

我已经使用angularfire和firebase构建了一个登录系统。

我有一个在用户登录时多次调用的函数。检查authData是否存在,并将用户注册为已登录(如果存在)。

fbRef.onAuth(authDataCallback);
function authDataCallback(authData) {
    if (authData) {
        $scope.loggedIn = true;
    } else {
        $scope.loggedIn = false;
    }
}

我也设置了路线

.config(function($routeProvider) {
    $routeProvider
    .when('/', {
        controller: '',
        templateUrl: '/company/pages/account/pages/dashboard.php',
    })
    .when('/dashboard', {
        controller: '',
        templateUrl: '/company/pages/account/pages/dashboard.php',
    })
    .when('/login', {
        controller: 'Authorization',
        templateUrl: '/company/pages/account/pages/login.php',
    })
    .when('/register', {
        controller: 'Authorization',
        templateUrl: '/company/pages/account/pages/register.php',
    })
})

我想要每个页面,但登录和注册页面仅限于登录用户。如果$scope.loggedIn返回false,我希望将用户重定向到登录页面。

我在互联网上尝试了很多解决方案,但没有一个对我有用。其中大多数都导致超出限制的错误。

在我的情况下如何限制访问?

3 个答案:

答案 0 :(得分:0)

您可以检查“loggedIn”变量是否有更改

    app.controller('MyCtrl', ['$scope', '$location', function($scope, $location){

        fbRef.onAuth(authDataCallback);

        $scope.loggedIn = null;

        function authDataCallback(authData) {
            $scope.loggedIn = authData ? true : false
        }

        $scope.$watch("loggedIn", function(val){

            val === false && $location.path("/login");

        });

    });

答案 1 :(得分:0)

在我们的控制器中,检入回调并相应地重定向。

app.controller('MyCtrl', ['$scope', '$location', function($scope, $location) {

  fbRef.onAuth(authDataCallback);

  function authDataCallback(authData) {
      authData ? $location.path("/dashboard") : $location.path("/login");
  }

}]);

答案 2 :(得分:0)

计划:

另一种可能的解决方案是从loginRequired设置一个名为$routeProvider的变量 并从$routeChangeStart检查变量与$rootScope.loggedIn

不幸的是,您可以看到必须将$scope.loggedIn移至$rootScope.loggedIn

一种可能的实施方式:

在路由器中:

.config(function($routeProvider) {
    $routeProvider
        .when('/', {
            controller: '',
            templateUrl: '/company/pages/account/pages/dashboard.php',
            loginRequired: true
        })
        .when('/dashboard', {
            controller: '',
            templateUrl: '/company/pages/account/pages/dashboard.php',
            loginRequired: true
        })
        .when('/login', {
            controller: 'Authorization',
            templateUrl: '/company/pages/account/pages/login.php',
            loginRequired: false
        })
        .when('/register', {
            controller: 'Authorization',
            templateUrl: '/company/pages/account/pages/register.php',
            loginRequired: true
        })
    })

app.run

app.run(
    ['$rootScope', '$location', function($rootScope, $location) {

        $rootScope.$on('$routeChangeStart', function() {
            if ($rootScope.loginRequired && !$rootScope.loggedIn) {
                $location.path("/login");
            }
        });

    }]);