问题标签 [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.
angular - Angular 4 CanActivateChild 不起作用
我正在尝试使用 限制对我的路线系统的访问CanActivateChild
,但是当我尝试阻止用户导航到一组子状态时,RouteGuard 不起作用,只能在CanActivate
. 这是我的路由模块:
在这个例子中,如果我尝试访问路由test
,我可以看到 AuthGuard 正在执行,该函数canActivate
被调用。
但是,当我尝试导航到任何子路线(个人资料或地址)时,什么也没有发生。两者,canActivate
并且canActivateChild
不会在AuthGuard
.
这是我的保护文件:
angular - 在角度 2 中每次刷新时清除 localStorage
身份验证后,我将令牌存储在 localStorage 中,但每次刷新时我都需要将其删除并重定向到某个路由器。
我不知道如何在角度上做到这一点。我正在使用一种非常hacky的方式使用纯js。
我正在考虑添加一个身份验证保护,但我确信应该有一个更角度的方式来做到这一点。
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 后取消订阅或停止接收事件?
angular - 如何使用 Angular 2 在刷新时重定向到主页?
我正在使用 Angular CLI 构建应用程序。我已经配置了如下所示的路由:
我有一个要求,在刷新页面时我需要重定向到主路径。
注意:我曾尝试与警卫一起做,但未能达到预期的效果。请帮我完成这些步骤。
提前致谢
angular - 按顺序执行多个异步路由守卫
我知道当 canActivate 函数返回一个简单的时,角度路由守卫按指定的顺序执行boolean
,但是,如果守卫返回类型Observable<boolean>
或Promise<boolean>
?
路线示例:
SessionExpiredAuthGuard 和 CheckoutAuthGuard 都返回 type Observable<boolean>
。我不希望在 SessionExpiredAuthGuard 完成从异步 http 请求中检索其数据之前执行 CheckoutAuthGuard。
有没有办法强制这些异步守卫按顺序执行?
angular - 成功登录后未呈现角度组件
菜单组件(应仅在成功登录后可见)
菜单组件模板
主要内容组件
主要内容组件模板
应用组件模板
我正在研究使用*ngIf
指令来根据用户是否登录来处理菜单组件的可见性。从上面的代码可以看出,该属性从函数中isLoggedIn
分配了一个布尔值。loggedIn()
我认为到目前为止一切都很简单,但问题是菜单组件在成功登录后没有立即显示,我必须刷新浏览器才能看到菜单。不太清楚为什么会出现这种情况。有什么建议或想法吗?
angular - Angular 和 JWT - 客户端如何验证令牌?
如果我要提供一个假的 JWT,我意识到 Angular 会在登录时“接受它”,因为大多数教程只是检查是否在 localStorage 中设置了 JWT 密钥(以及它是否没有过期。)
关于使用 JWT,我有什么遗漏吗?我觉得客户端需要检查令牌是否真的来自服务器。考虑这种情况:
/#/admin
用户使用看起来像这样的假 JWT进行路由: {'username': 'hacker', 'role': 'admin'}
. 现在用户向服务器发送一个令牌,服务器检查签名(和过期),由于秘密签名密钥错误,用户从(API)服务器收到 401/403 响应,客户端挂起(带有工具栏的空白屏幕) 因为没有来自服务器的有效响应。
这是“安全”还是“可以”,用户可以用假的 JWT 绕过我的 Guard,因为他们无论如何都无法从服务器获取任何数据?
angular - 路由器保护不起作用
因此,我尝试关注 ngrx/example-app,并且堆放了路由器防护装置。我的警卫不起作用。
加载的属性存在于减速器中并被选中。сcode执行没有达到hasPlaylists函数所以我认为switchMap不起作用,但我不明白为什么=)
UPD:添加了路由器声明
UPD:我想我找到了解决方案。如果我使用地图而不是在这里过滤:
并在这里采取行动:
UPD:正如@Skeptor 在评论中建议的那样,我不需要map
获取元素,所以我可以在这里删除它
守卫工作正常,但我仍然不明白为什么它不能与过滤器一起使用=/
angular - 使用解析器在组件渲染之前获取异步数据
我想在开始渲染组件之前从服务器获取异步数据。我试图使用路由解析器,但我看不出它有什么帮助。
我可以使用以下方法通过 ActivatedRoute 访问组件中的解析器数据:
在“订阅”中的异步代码完成之前,组件会被初始化和渲染。
正确的方法是什么?
更新:我的解析器代码:
}
angular - 如何在Angular 4中有条件地[de]激活具有相同路径的子路由?
根据父路径 /search,想解析 [NavigActionResolve] 并激活子路由,如下所示。
由于我需要同时使用两个子插座,因此我将路径设置为
小路:''
以便默认选择两者。但是,根据我的守卫中设置的条件,我希望这些出口中只有一个处于活动状态。
守卫[de]激活如下
ShowProviderFiltersRouteGuard
ShowConsumerFiltersRouteGuard
请注意上面 ShowConsumerFiltersRouteGuard 相关的 canActivate() 中的 NOT [!]。因此,在任何时间点都应该只有一个处于活动状态。
以下是我如何在我的 Html 中使用这些插座
我注意到的是,由于两条子路径都相同,因此它们都被停用并且我的路线被取消。我的要求是,我不能为每个路径设置单独的路径,我想知道如何才能完成这项工作。请有任何建议。