我有一个 AngularJS 应用程序 (Angular v1),它全部使用安全登录。未通过身份验证的用户只能看到登录页面、忘记密码页面和cookie策略。
我正在使用ngRoute
,如下所示:
$routeProvider
.when('/login:param', {
templateUrl: 'app/login/login.html',
controller: 'loginCtrl',
controllerAs: 'vm'
})
/* ... other routes ... */
.otherwise({
redirectTo: '/login'
});
现在,如果用户登录后无法查看所有“公共(public)路由”(==用户无需身份验证即可查看的路由),我想将用户重定向到仪表板;如果未登录,则将其重定向到登录页面。
为此,我在 Angular run
函数中执行检查并监听 $locationChangeStart
事件:
$rootScope.$on('$locationChangeStart', function (event, next, current) {
if (routeClean($location.path()) && AuthenticationService.isLoggedIn()) {
$location.url(DASHBOARD);
} else {
$location.url(LOGIN);
}
});
其中 DASHBOARD
是一个常量,包含到 /dashboard
的路由,LOGIN
是一个常量,包含到 /的路由登录
。
在继续之前,我有几个问题:
run
是执行此检查的正确位置吗?(即使它正常工作,也许此检查应该放在其他地方)- 实现这一目标的最佳实践是什么?
在此检查中,AuthenticationService
是一个对用户进行身份验证的服务,而 routeClean
是一个检查路由是否位于数组内的函数:
var routeClean = function (route) {
for (var i = 0; i < CLEAN_ROUTES.length; i++) {
var pattern = new RegExp(CLEAN_ROUTES[i]);
var bool = pattern.test(route);
if (bool)
return true;
}
return false;
};
其中CLEAN_ROUTES
是一个数组,其中包含所有“公共(public)路线”。
CLEAN_ROUTES = [
'/login',
'/forgotten-password',
'/verify-code',
'/reset-password',
'/cookie-policy'
]
所以,最后一个问题是:
- 是否有更智能的方法来使用 Angular 检查“公共(public)路线”?
例如,如果我想为用户显示不同的登录模板,例如:
/login?user=client /login?user=seller /login?user=editor /login?user=admin
有没有办法让ngRoute
动态地做到这一点?
我对这个最新问题的意思是:例如,当用户注销应用程序时,我将他们重定向到 LOGIN
常量(这是登录页面的一般路线/login
),有没有办法可以区分卖家、客户等,以便我可以将他们重定向到正确的登录模板/页面?
最佳答案
关于javascript - 使用 AngularJS 管理动态路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44909856/