如果有人在未经认证的情况下尝试访问任何其他路由,我该如何重定向到登录页面?在AngularJS中,有没有“最佳”方法可以做到这一点?
看起来这是个常见的问题,但我似乎找不到解决方法。提前感谢您的帮助。
如果有人在未经认证的情况下尝试访问任何其他路由,我该如何重定向到登录页面?在AngularJS中,有没有“最佳”方法可以做到这一点?
看起来这是个常见的问题,但我似乎找不到解决方法。提前感谢您的帮助。
最好的方法是设置一个'$routeChangeStart'监听器,该监听器检查'authProvider'服务函数以验证是否有用户已登录。在我们的'app.js'中或在单独的文件中:
最好的方法是设置一个'$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;
}
};
});
这个解决方案是根据stackoverflow上这里的一个答案创建的。
感谢@MohammadAwwaad
我现在正在使用Node.js & Express & passport
模块以不同的方式进行操作,但在此之前,当我使用PHP时,我使用了几个Angular模块。我在我的<html>
标签上有一个外部模块,带有ng-app
,然后在某些标签上有ng-controller
,例如<body>
和某些<div>
。在其中一个这些ng-controller
中,我有一个身份验证函数,然后我有一个ng-if
用于登录、注销等。如果用户未登录,则隐藏当前页面并ng-include
适当的页面。否则,我会ng-include
当前页面。
那可能不是最好的解决方案,但我不想使用第三方模块。如果您感到困惑或有任何问题(我知道我很困惑),请随时问我。
ng-view
的用途,所以我正在尝试使用它。 - tscizzle
$routeChangeStart
或$stateChangeStart
监听器(对于UI路由器),检查身份验证状态,如果未经身份验证,则重定向到登录页面。 - Mohammad Sepahvand