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

angular - 检查ngrx中可能要加载的列表中是否存在元素

我正在尝试在警卫中构建一系列 RXJS 命令,以便在一个简单的库(如书籍)应用程序中实现此结果:

  • 在商店中检查
  • 如果状态没有加载,触发一个动作
  • 加载后,过滤数据以找到一个特定项目
  • 如果找到,允许访问页面,如果没有,发送到 404

我已经苦苦挣扎了一段时间,并且根据 Angular 6 版或标准,在网上查看并没有给出答案......如果商店在击中警卫之前加载,我已经成功地做了什么来创建它,但如果它需要获取数据,它会无限循环。

非常感谢!

0 投票
1 回答
687 浏览

angular - Angular 6+ Guards - 返回 true/false 到 combineLatest 订阅

我怎样才能在里面返回真/假subscribe

0 投票
0 回答
242 浏览

angularjs-scope - Angular Guard 无法访问 Angular 服务对象

我正在尝试访问 Angular 服务对象(我已经在服务中设置了 AuthContext),但是 Angular Guard 给出了 undefined ,即使它设置得很好。

我有登录组件,我首先在内部调用它,它使用 Angular Auth 服务。在该服务的构造函数中,我确保正确设置了 AuthContext。通过调试,我看到该对象具有所有必需的声明。

但是,当我访问常规组件(我已通过 Auth Guard 保护)时,该 Guard 中的 CanActivate 方法无法访问上下文。

知道为什么吗?这是我的代码的小概述...

在此处输入图像描述

在此处输入图像描述

我也尝试过使用控制台日志,它看起来像是在服务类之前调用​​了 Auth Guard。但是Auth.Guard,我在构造函数中使用了authservice,并且由于依赖注入,服务对象应该被调用..不知道这里出了什么问题......

这是控制台日志 在此处输入图像描述

有什么建议吗?

0 投票
0 回答
868 浏览

angular - 如何在浏览器刷新Angular 4时处理CanActivate

我有一个应用程序,我需要根据角色保护特定用户的路由。我的应用程序中有 Windows 身份验证,因此有单独的登录页面,所以我直接从 app.component.ts 调用登录方法。一切正常,就像能够保护路由一样,但是在刷新页面时它会再次登录,其中角色的数据被延迟意味着在组件加载并且无法获取角色时,它会重定向到仪表板页面(根据我的要求以防任何用户无权查看页面)。我知道我必须使用 observables,但就我而言,代码有点不同。任何人都可以提出实现这一目标的最佳方法。下面是代码

app.component.ts

应用服务.ts

可以激活-guard.ts

0 投票
2 回答
35 浏览

angular - 使用异步方法进行验证时,是否可以从 Angular 的 Guard 中重定向?

在我的 Angular(6.xx) 项目中,我在某些路由上实现了一个 Guard,如果它失败,应该重定向到 '/login'。Guard 依赖于异步方法AuthService来验证用户。

我如何实现这一目标?

注意:如果 canActivate 中的代码是同步的,我知道该怎么做。

代码示例:https ://stackblitz.com/edit/angular-async-guard-redirect?file=src%2Fapp%2Fapp.module.ts

0 投票
1 回答
1159 浏览

angular - 动态注册canDeactivate guard并提示确认导航

有什么方法可以让组件为自己动态注册 canDeactivate 防护?它主要是提示/阻止用户使用是/否等确认导航。

我正在尝试这样做,因为有问题的应用程序非常大,并且工作流组件(例如:支付、转账等)分布在应用程序中的许多不同模块中。我不确定在路由器配置中静态注册它们是否是个好主意。

我正在寻找一种在组件中可以提示和控制类似于警卫的导航的方法。

0 投票
1 回答
2961 浏览

angular - Angular 6 中为有效守卫引发的 NavigationCancel 事件

在导航到提供的状态的过程中,我遇到了 Angular 路由器的问题。

我曾尝试使用带有返回布尔值的自定义警卫canLoad()和函数,但没有任何运气。canActivate()true

Angular文档声明如下:

NavigationCancel:取消导航时触发的事件。这是由于 Route Guard 在导航期间返回 false。

由于我没有从路由器跟踪中获得更多调试信息(没有给出原因),我不得不在这里检查是否有修复,或者这是一个现有的错误。我也很欣赏有关在 Angular 6 中调试路由器的其他方法的任何信息。

控制台输出

控制台输出

我在这里创建了一个小项目。该项目需要访问提供程序,我正在使用 angular-oauth2-oidc 存储库中提供的 OpenID Connect 提供程序。密码/用户名是 max/geheim。

如何重现错误

  1. 克隆 repo 并在 localhost:4200 提供站点
  2. 转到 localhost:4200/oversikt/index
  3. 使用 max/geheim 作为用户名/密码登录
  4. 读取控制台

更新 我怀疑它与导航到children: []路线有关。

0 投票
1 回答
224 浏览

angular - Angular 防护中的异步代码无法打开页面

设置很简单。我有一个守卫路线的守卫。如果是用户的属性locationSaved === true那么我们要让用户进入页面。

如果浏览器令牌的第一次检查是假的,我们想发出一个 HTTP 请求来查看用户对象的 locationSaved 属性的最新版本是否可能更新为真。

我做了服务器请求,它返回真,所以我希望它打开页面,但不幸的是它没有。我认为这与我在页面中所做的异步请求有关,因为当我将服务器请求代码替换为简单的return true; 然后它确实打开了页面。

如果服务器返回true,有谁知道我如何使用这个异步请求并导航到页面?

这是我的守卫代码。我进行了设置,以便它发出异步请求并且服务器返回 true。但是,它不会导航到该页面。

0 投票
3 回答
1902 浏览

angular - 如果用户未登录,如何重定向到登录页面?

我已经实现了登录前和登录后保护,以便某些用户无法访问所有页面。我的问题是,当用户未登录时,当他们尝试进入未经授权的页面时,例如“localhost:4200/restricted_pa​​ge”,它应该被重定向到登录页面“localhost:4200/login”。但我无法重定向到登录页面。现在它只重定向到 localhost:4200 。

我应该在哪里修复代码?

登录前.guard

登录后守卫

令牌服务

0 投票
1 回答
1028 浏览

angular - 订阅路由守卫中的 observables 及其含义

我有一个名为的路由器保护PermissionGuard程序,它在此处启动

在我的内部,我PermissionGuard订阅了PermissionService这样的内容:

并根据这些数据执行必要canActivate或检查。canActivateChild通过从子路由内部添加console.log()和发出新数据,permissions$我可以看到 observable 仍然处于活动状态,即使防护已被“使用”并且路由已激活。然后我期待当我去外面的路线时它会消失path: ':company',但是守卫没有被摧毁。

这让我想到了我的问题: 我这样做正确吗?我希望使用警卫检查用户是否有任何权限,但同时我只想执行一次 HTTP 权限请求(导航到path: ':company'或其任何子级时)。恐怕如果我使用这样的守卫,由于大量的观察者,它会及时减慢整个应用程序。