gpt4 book ai didi

angularjs - Angular 路由异步授权

转载 作者:行者123 更新时间:2023-12-04 14:42:42 26 4
gpt4 key购买 nike

Angular 不提供任何关于路由的授权/访问权限(我说的是默认的 Angular 路由 1.x 而不是 beta 2.0 或 UI 路由)。但我必须执行它。

我遇到的问题是我有一个服务,它调用服务器来提供这个信息并返回一个 promise 。然而,这个数据只获取一次,然后缓存在客户端,但它仍然需要获取一次。

我现在想处理$routeChangeStart检查下一条路由是否定义特定属性的事件 authorize: 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', function (e, to, from, reason) {
if (reason.noAuth) {
// 'to' path and params should be passed to login as well
$location.path('/login');
}
});
});

另一种选择是添加 default方法 $routeProvider和修补 $routeProvider.when从默认对象扩展路由定义。

关于angularjs - Angular 路由异步授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33016355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com