问题标签 [angular-router-guards]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1167 浏览

angular - Angular 4 CanActivateChild 不起作用

我正在尝试使用 限制对我的路线系统的访问CanActivateChild,但是当我尝试阻止用户导航到一组子状态时,RouteGuard 不起作用,只能在CanActivate. 这是我的路由模块:

在这个例子中,如果我尝试访问路由test,我可以看到 AuthGuard 正在执行,该函数canActivate被调用。

但是,当我尝试导航到任何子路线(个人资料或地址)时,什么也没有发生。两者,canActivate并且canActivateChild不会在AuthGuard.

这是我的保护文件:

0 投票
1 回答
2821 浏览

angular - 在角度 2 中每次刷新时清除 localStorage

身份验证后,我将令牌存储在 localStorage 中,但每次刷新时我都需要将其删除并重定向到某个路由器。

我不知道如何在角度上做到这一点。我正在使用一种非常hacky的方式使用纯js。

我正在考虑添加一个身份验证保护,但我确信应该有一个更角度的方式来做到这一点。

0 投票
1 回答
441 浏览

angular - 以角度 2+ 路由到延迟加载模块中的特定页面

我的主应用程序路由器中有以下内容:

{ path: 'users', loadChildren: 'app/modules/users/users.module#UsersModule', canLoad: [AuthGuard] }

当用户访问http://localhost:4200/users/1234查看他们的个人资料时,我会尝试保存完整的 url(包括上面的用户 ID),以便在他们登录后返回该页面.

问题是,函数Route中的参数canLoad只有一个path字段,上面不包含用户ID,只有路径users。有没有办法可以做到这一点?

第一次评论后编辑

用户路由模块确实有一个canActivate守卫,但是除了登录组件之外,它永远不会被调用,因为第一个canLoad返回 false 并将调用者路由到之前的登录组件。

第一次回答后编辑

所以我尝试了上述方法,但我认为我仍然做错了,因为控制台从不记录......我如何NavigationCancel在设置存储重定向 URL 后取消订阅或停止接收事件?

0 投票
2 回答
2787 浏览

angular - 如何使用 Angular 2 在刷新时重定向到主页?

我正在使用 Angular CLI 构建应用程序。我已经配置了如下所示的路由:

我有一个要求,在刷新页面时我需要重定向到主路径。
注意:我曾尝试与警卫一起做,但未能达到预期的效果。请帮我完成这些步骤。

提前致谢

0 投票
3 回答
6727 浏览

angular - 按顺序执行多个异步路由守卫

我知道当 canActivate 函数返回一个简单的时,角度路由守卫按指定的顺序执行boolean,但是,如果守卫返回类型Observable<boolean>Promise<boolean>

路线示例:

SessionExpiredAuthGuard 和 CheckoutAuthGuard 都返回 type Observable<boolean>。我不希望在 SessionExpiredAuthGuard 完成从异步 http 请求中检索其数据之前执行 CheckoutAuthGuard。

有没有办法强制这些异步守卫按顺序执行?

0 投票
1 回答
545 浏览

angular - 成功登录后未呈现角度组件

菜单组件(应仅在成功登录后可见)

菜单组件模板

主要内容组件

主要内容组件模板

应用组件模板

我正在研究使用*ngIf指令来根据用户是否登录来处理菜单组件的可见性。从上面的代码可以看出,该属性从函数中isLoggedIn分配了一个布尔值。loggedIn()

我认为到目前为止一切都很简单,但问题是菜单组件在成功登录后没有立即显示,我必须刷新浏览器才能看到菜单。不太清楚为什么会出现这种情况。有什么建议或想法吗?

0 投票
1 回答
1021 浏览

angular - Angular 和 JWT - 客户端如何验证令牌?

如果我要提供一个假的 JWT,我意识到 Angular 会在登录时“接受它”,因为大多数教程只是检查是否在 localStorage 中设置了 JWT 密钥(以及它是否没有过期。)

关于使用 JWT,我有什么遗漏吗?我觉得客户端需要检查令牌是否真的来自服务器。考虑这种情况:

/#/admin用户使用看起来像这样的假 JWT进行路由: {'username': 'hacker', 'role': 'admin'}. 现在用户向服务器发送一个令牌,服务器检查签名(和过期),由于秘密签名密钥错误,用户从(API)服务器收到 401/403 响应,客户端挂起(带有工具栏的空白屏幕) 因为没有来自服务器的有效响应。

这是“安全”还是“可以”,用户可以用假的 JWT 绕过我的 Guard,因为他们无论如何都无法从服务器获取任何数据?

0 投票
0 回答
265 浏览

angular - 路由器保护不起作用

因此,我尝试关注 ngrx/example-app,并且堆放了路由器防护装置。我的警卫不起作用。

加载的属性存在于减速器中并被选中。сcode执行没有达到hasPlaylists函数所以我认为switchMap不起作用,但我不明白为什么=)

UPD:添加了路由器声明

UPD:我想我找到了解决方案。如果我使用地图而不是在这里过滤

并在这里采取行动:

UPD:正如@Skeptor 在评论中建议的那样,我不需要map获取元素,所以我可以在这里删除它

守卫工作正常,但我仍然不明白为什么它不能与过滤器一起使用=/

0 投票
2 回答
794 浏览

angular - 使用解析器在组件渲染之前获取异步数据

我想在开始渲染组件之前从服务器获取异步数据。我试图使用路由解析器,但我看不出它有什么帮助。

我可以使用以下方法通过 ActivatedRoute 访问组件中的解析器数据:

在“订阅”中的异步代码完成之前,组件会被初始化和渲染。

正确的方法是什么?

更新:我的解析器代码:

}

0 投票
0 回答
1117 浏览

angular - 如何在Angular 4中有条件地[de]激活具有相同路径的子路由?

根据父路径 /search,想解析 [NavigActionResolve] 并激活子路由,如下所示。

由于我需要同时使用两个子插座,因此我将路径设置为

小路:''

以便默认选择两者。但是,根据我的守卫中设置的条件,我希望这些出口中只有一个处于活动状态。

守卫[de]激活如下

ShowProviderFiltersRouteGuard

ShowConsumerFiltersRouteGuard

请注意上面 ShowConsumerFiltersRouteGuard 相关的 canActivate() 中的 NOT [!]。因此,在任何时间点都应该只有一个处于活动状态。

以下是我如何在我的 Html 中使用这些插座

我注意到的是,由于两条子路径都相同,因此它们都被停用并且我的路线被取消。我的要求是,我不能为每个路径设置单独的路径,我想知道如何才能完成这项工作。请有任何建议。