【发布时间】:2017-07-04 15:37:30
【问题描述】:
我有一个 AngularJS 应用程序(Angular v1),它都使用安全登录。未经认证的用户只能看到登录页面、忘记密码页面和cookie策略。
我正在像这样使用ngRoute:
$routeProvider
.when('/login:param', {
templateUrl: 'app/login/login.html',
controller: 'loginCtrl',
controllerAs: 'vm'
})
/* ... other routes ... */
.otherwise({
redirectTo: '/login'
});
现在,如果用户登录时无法查看所有“公共路由”(== 用户无需身份验证即可看到的路由),我想将用户重定向到仪表板;如果他们没有登录,则将他们重定向到登录页面。
为此,我正在检查 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 是一个包含到/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 是一个数组,其中包含所有“公共路线”。
CLEAN_ROUTES = [
'/login',
'/forgotten-password',
'/verify-code',
'/reset-password',
'/cookie-policy'
]
所以,这里是最后的问题:
- 有没有更智能的方法来使用 Angular 检查“公共路线”?
-
例如,如果我想为用户显示一个不同的登录模板,类似于:
/login?user=client /login?user=seller /login?user=editor /login?user=admin
有没有办法让ngRoute 动态地做到这一点?
我对这个最新问题的意思是:例如,当用户退出应用程序时,我将他们重定向到 LOGIN 常量(这是登录页面 /login 的一般路径),有没有一种方法可以区分卖家、客户等,以便我可以将它们重定向到正确的登录模板/页面?
【问题讨论】:
标签: javascript angularjs routing