【问题标题】:ng-token-auth and route permissionsng-token-auth 和路由权限
【发布时间】: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


【解决方案1】:

我会将AuthenticationAuthorization 视为两个不同的东西。

ng-token-auth 帮助您进行身份验证。它甚至可以帮助您选择哪些路由必须对经过身份验证的用户可用,请参阅 example-using-angular-ui-router

role: 2 // Only allow a specific role

似乎更多的是授权和权限。为此,您可能需要采取不同的方法。一种这样的方法。我们采取了类似的方法 - 我们还确保预先获取了一些授权。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2016-05-25
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多