AngularJS 授权重定向
AngularJS Redirect for Authorization
我用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
returns 为假,我希望用户被重定向到登录页面。
我在互联网上尝试了很多解决方案,但 none 对我有用。他们中的大多数都导致了超出限制的错误。
在我的情况下如何限制访问?
您可以检查 "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");
});
});
在我们的控制器中,检查回调并相应地重定向。
app.controller('MyCtrl', ['$scope', '$location', function($scope, $location) {
fbRef.onAuth(authDataCallback);
function authDataCallback(authData) {
authData ? $location.path("/dashboard") : $location.path("/login");
}
}]);
计划:
另一种可能的解决方案是从 $routeProvider
中设置一个名为 loginRequired
的变量
并从 $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");
}
});
}]);
我用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
returns 为假,我希望用户被重定向到登录页面。
我在互联网上尝试了很多解决方案,但 none 对我有用。他们中的大多数都导致了超出限制的错误。
在我的情况下如何限制访问?
您可以检查 "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");
});
});
在我们的控制器中,检查回调并相应地重定向。
app.controller('MyCtrl', ['$scope', '$location', function($scope, $location) {
fbRef.onAuth(authDataCallback);
function authDataCallback(authData) {
authData ? $location.path("/dashboard") : $location.path("/login");
}
}]);
计划:
另一种可能的解决方案是从 $routeProvider
中设置一个名为 loginRequired
的变量
并从 $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");
}
});
}]);