问题标签 [angular-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 回答
436 浏览

angular - 即使返回 true,当调用刷新令牌 api 时,Angular CanActivate 也不会路由到新路由

我一直致力于在 Angular 6 项目中添加路由保护和令牌拦截器。

在路由守卫的 canActivate 中,我调用了一个异步方法来检查访问令牌是否已过期:

  1. 如果是,则检查刷新令牌是否过期,如果也过期,则将用户注销,否则,使用刷新令牌获取新的访问令牌。

  2. 如果否,则将用户导航到该路线。

但是,只要访问令牌过期(第 1 点),就不会导航到该路由。我已经尝试了所有方法和所有组合,但它仍然有效。




0 投票
0 回答
38 浏览

angular - 角度添加影响页面布局的`resolve`防护

我正在尝试向组件添加解析。但是当我添加解析时,如果影响页面布局。该组件可能获得absolute位置并脱离parent component网格。知道如何解决这个问题。当我删除解决方案时,一切正常。

以下是路由配置

以下是解决服务

以下是组件

0 投票
1 回答
1932 浏览

angular - Angular - 无法获取当前用户在警卫中的角色以检查他/她是否有权访问受保护的路线

我正在尝试在有多种角色的基于项目的基础上实施基于角色的访问控制Angular

我想在CanActivate界面中获取用户的数据(角色属性)以检查用户是否有权访问受保护routes的 in guard,但BehaviouralSubject在接收到来自的最新值后不更新初始状态API

因此,我在身份验证服务中获取用户的数据,然后将接收到的值传递给userRole主题,但更新的属性 (BehaviouralSubject) 在保护文件中不可用。

认证服务

认证卫士

这是路由

我也尝试了另一种方法,(例如使用订阅)但是当我尝试这样subscribeuserRole主题时:

那么 “AuthGuard”类型中的属性“canActivate”不可分配给基类型“CanActivate”错误中的同一属性,因为Subscription类型不可分配给类型boolean

因此,您能否给出任何提示或推荐使用 observables处理RBAC的更好方法。angular

附言

我已经看到了解决方案localStorage但我不想将用户的数据(令牌除外)保留在那里。

0 投票
1 回答
2095 浏览

angular - 隐藏 Angular 8 中的导航栏(auth-guard 路由未记录在 routes.event 中)

全部,

在实施 auth 保护之前,我能够从登录和注册屏幕中隐藏我的导航栏。通过读取 component.ts 中的路由事件并通过 ngIf 隐藏导航栏。在我实施 auth guard 之后,auth guard 到登录页面的路线没有隐藏下面的导航栏是我的代码..

在这里,我的身份验证服务将检查用户是否已通过身份验证服务进行身份验证(将从 cognito 获取数据)。现在,我怎样才能从 auth 守卫发生的路线中隐藏导航栏。请帮忙

app.component.html

app.component.ts

路线.ts

auth.guard 服务:

0 投票
2 回答
1333 浏览

angular - 在页面刷新中:ngrx store dispatch issue with guard canactivate

我没有登录页面,这是 sso 调用

在应用程序组件中,我已经调度了一个动作来加载服务器端令牌调用并获取令牌,并且基于用户角色我可以激活路由中的守卫。如果警卫激活返回 true,我将进入仪表板页面。

在dashboard页面中,我在浏览器URL中进行了刷新,可以在登录动作效果之前激活execute,因此可以激活return false,页面显示空白。

在dashboard有子路由,也有productsdashboard/products等子链接,也有激活的guard,但是可以在login dispatch action影响成功调用之前激活return false。

谁能帮助我我做错了什么?

这里是路由,

这是激活方法:在这里我从效果调用中获得成功,同时从 app.component 调度一个动作:

应用程序组件:

问题只在页面刷新。单击路由器链接时,逻辑工作正常。

我的初始状态:

流程截图:在此处输入图像描述

0 投票
1 回答
339 浏览

angular - 带有 Observable 的 Angular 路由器防护在页面刷新后不起作用

我有下一个 Angular Guard:

这是来自服务的方法,它返回 Observable:

这在我在页面之间导航时有效,但是当我直接在 URL 中输入某些路由时,例如“myapp.com/admin”,它会自动返回 false,并且防护不起作用。如何让它正常工作?

0 投票
1 回答
28 浏览

angular - 如何让 Angular Guard 使用 API 服务进行验证并在失败时重新路由?

再会!

我有一个用于处理时间卡的 Angular 7 应用程序。我正在使用 CanActivate Guard 来输入组件。CanActivate 代码使用 Observable 来确定是否应该让它们通过或重定向。

它调用的服务如下所示:

我已经验证了当 API 返回 false 时,会创建并返回 UrlTree 以及返回 true 的 API 结果也正常的逻辑。

但是,我的实际结果是,如果我尝试使用控件访问路由:

  1. 使用应用程序组件中的控件,我有正确的访问权限,守卫让我通过
  2. 使用应用程序组件中的控件,我没有正确的访问权限,守卫将我留在我所在的位置(拒绝我走那条路线)。什么时候应该重新路由我。
  3. 如果我试图通过在浏览器中键入它而直接在该路线上“着陆”,我只会得到一个空白的路由器插座。

谁能帮我?

另外:可能的相关路线(删除了其他项目):

0 投票
1 回答
1272 浏览

angular - 如何在Angular canActivate guard中从父路由重定向到子路由?

我有这条路线

应用路由

用户路由

根据某些条件使用 UserPhonesCheckGuard 我想重定向或检查或帐户子路由但使用

浏览器疯了:(

我应该使用什么路径?

0 投票
2 回答
605 浏览

angular - Angular 解析器 observable 过早完成

我将主题作为可观察对象从服务传递给解析器。当一个 http 请求完成或当它发现它需要的数据被缓存时,服务可能会完成 observable。在第二种情况下,数据被缓存,看起来 observable 完成得太早了,因为路由转换没有发生。如果我将 requestSubject.complete() 放在 setTimeout 中并有一些超时,它可以工作,否则它不会。

0 投票
1 回答
1060 浏览

angular - Angular Universal:使用 NgRx 在服务器端获取 Store in Guard

我正在运行一个使用 NgRx 进行状态管理的 Angular 9 Universal 应用程序。我还使用 ngrx-store-localstorage 将 Store 持久化到用户的 localStorage 中。

我正在尝试在使用 Guard 中的 NgRx 访问某些路由之前检查用户是否已登录:

我正在进行平台检查,因为我的服务器无权访问商店。但这会产生不需要的行为,因为它会检查两次,有时会在呈现受保护的页面之前呈现登录页面。

您是否知道让我的服务器了解当前状态的方法或验证我的用户是否已通过身份验证的替代方法?