如果有人在未经过身份验证时尝试点击其他任何路由,我该如何重定向到登录页面?有没有最好的"在AngularJS中这样做的方法?
似乎是一个常见的问题,但我似乎找不到办法来做到这一点。提前感谢您的帮助。
答案 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&快递& passport
模块,但在此之前,当我使用PHP时,我使用了几个Angular模块。我的<html>
标记上有一个外部模块ng-app
,然后ng-controller
处于某些标记,例如<body>
&amp;某些<div>
s。在其中一个ng-controller
中,我有一个身份验证功能,然后我有一个ng-if
用于登录,注销等。如果用户没有登录,我隐藏了当前页面{{1适当的页面。否则,我ng-include
d当前页面。
这可能不是最好的解决方案,但我不想使用第三方模块。如果你感到困惑或有任何疑问(我知道我很困惑),请问。