加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 角度路由异步授权

发布时间:2020-12-17 07:56:11 所属栏目:安全 来源:网络整理
导读:Angular不提供路由的任何授权/访问权限(我说的是默认的Angular route 1.x而不是beta 2.0或UI路由).但我必须实施它. 我遇到的问题是我有一个服务,调用服务器提供此信息并返回一个承诺.然而,此数据仅获取一次,然后缓存在客户端上,但仍需要获取一次. 我现在想要
Angular不提供路由的任何授权/访问权限(我说的是默认的Angular route 1.x而不是beta 2.0或UI路由).但我必须实施它.

我遇到的问题是我有一个服务,调用服务器提供此信息并返回一个承诺.然而,此数据仅获取一次,然后缓存在客户端上,但仍需要获取一次.

我现在想要处理$routeChangeStart事件,该事件检查下一个路由是否定义了特定的属性授权:someRole.然后,此处理程序应使用我之前提到的服务获取该数据,并相应地对返回的数据执

除了添加之外的任何想法都解决了我的所有路线?我能以某种方式集中做到这一点吗?适用于所有适用的路线?

最终解决方案

在接受的答案的帮助下,我能够实现一个相当简单和集中的解决方案来执行异步授权. Click here在行动中查看它或检查其内部工作代码.

最简单的方法是处理当前路由的解析依赖关系,$routeChangeStart是管理它的好地方. Here’s an example.
app.run(function ($rootScope,$location) {
  var unrestricted = ['','/login'];

  $rootScope.$on('$routeChangeStart',function (e,to) {
    if (unrestricted.indexOf(to.originalPath) >= 0)
      return;

    to.resolve = to.resolve || {};
    // can be overridden by route definition
    to.resolve.auth = to.resolve.auth || 'authService';
  });

  $rootScope.$on('$routeChangeError',to,from,reason) {
    if (reason.noAuth) {
      // 'to' path and params should be passed to login as well
      $location.path('/login');
    }
  });
});

另一种选择是将默认方法添加到$routeProvider并修补$routeProvider.when以从默认对象扩展路由定义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读