我尝试了一种新的角度身份验证架构,并遇到了带有通配符参数的路由问题......
在我的路线配置中,我设置了
.when('/:username', {
templateUrl: '/views/client/login.html',
controller: 'ClientLoginCtrl'
})
.when('/:username/dashboard', {
templateUrl: '/views/client/dashboard.html',
controller: 'ClientDashboardCtrl',
accessLevel: ACCESS_LEVELS.client
})
这样每个用户在网址中都有自己的文件夹。并且用户仪表板路由受到保护。
我设置了一个常量定义级别和未经过身份验证的路由。正如您在下面看到的,我尝试设置一个/:username
参数,因为我想将它们返回到用户登录页面,如果他们试图转到更深的页面而没有登录...
.constant('ACCESS_LEVELS', {
client: {
level: 1,
denied: '/:username'
},
admin: {
level: 2,
denied: '/admin'
}
})
然后我在$ routeChangeStart事件中测试它们是否经过身份验证..如果没有..我想将用户返回到上面常量中定义的拒绝路由...
.run(function($rootScope, $location, Auth){
$rootScope.$on('$routeChangeStart', function(evt, next){
if(!Auth.isAuthorised(next.$$route.accessLevel.level))
{
$location.path(next.$$route.accessLevel.denied);
}
});
在我在网址中引入:username
参数之前,这一切都很有效。 $ routeParams不会设置,直到路由发生变化,因此在$ routeChangeStart事件中不可用。如果我转到/ sample-user / dashboard并且没有登录,则URL会更改为/:username ... not / sample-user,这是我想要的。
有人能想出解决这个问题的简单方法吗?