【发布时间】:2014-12-05 03:00:39
【问题描述】:
目前我正在将ng-token-auth 实现到我的 Angular 应用程序中,虽然效果很好,但我在限制对某些页面的访问时遇到了一些问题。
在我的一些路线中,我有几个额外的参数:
data: {
title: 'Dashboard',
restricted: true, // Only allow logged in users
role: 2 // Only allow a specific role
}
我正在检查$stateChangeStart中的登录,所以在切换路由之前,我可以检查用户是否被允许进入该路由。
我遵循了ng-token-auth 的建议,即使用父路由解析来检查用户是否登录:
resolve: {
auth: function($auth) {
console.log('validate user');
return $auth.validateUser();
}
}
现在问题来了,当我第一次加载应用程序时,显然$stateChangeStart 事件在$auth.validateUser() 被解决之前被触发,因为$stateChangeStart 内的登录失败并且用户被重定向到登录页面。
实现这个“权限逻辑”的更好方法是什么,我不想按路由都这样做,因为这会增加很多额外的工作和代码。
在$stateChangeStart 中执行此操作似乎也不是最佳选择,因为这在首次加载时不起作用。
【问题讨论】:
-
为什么不能在
$stateChangeSuccess中查看auth?$stateChangeSuccess只会被解雇,AFAIK,当所有resolve承诺都得到解决时,包括auth。 -
@NewDev 我可以这样做,但其他路线有更多
resolve承诺,我不确定我是否应该让用户加载他无法访问的额外数据。跨度> -
实际上,忘记
$stateChangeSuccess。看看这个SO answer吧 -
@NewDev 该链接对我帮助很大,谢谢!我使用了他们提供的示例并将其实现到我自己的应用程序中,它似乎可以满足我的需求。
标签: javascript angularjs authentication