问题标签 [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.
angular - Angular 9:调用 API 来检查会话是否未过期的 Guard
在我的 Angular 应用程序的某些页面上,我想验证会话未过期。
我在本地存储中有令牌,所以在 AuthService 我有:
首先:上面的代码正确吗?
我的 canActivate 函数应该是什么样子的?
我试过这个:
但是当令牌过期时它会给我错误。
angular - 如何在 Angular 中获取已传递给我的 canDeactivate Guard 的通用组件属性?
我想将多个组件(Component1 | Component2)传递到我的 canDeactivate 防护中,所以我使用下面这样的泛型。
问题- 我想从我传入的每个组件中访问一个属性,那么如何获取通用组件属性?
我必须投还是什么?我可以在调试器中看到该组件在那里,但是直到我在函数内部才能访问属性。
仅供参考 -component.profileForm.dirty
不起作用,因为在我进入函数之前它不知道 T 是什么
angular - Angular Guard 或 Firebase Auth 是否容易被黑客入侵
我读到,由于 Angular 是基于客户端的,因此不能单独信任它来保护路由等。但是,我找不到破解它的方法。
谁能详细解释如何编辑本地 js 文件以绕过路由保护(或使用任何方法)?Firebase Auth 怎么样,有人可以欺骗 Angular 认为您是另一个登录用户吗?
我有使用两者的示例网站。源代码位于此GitHub 存储库,它通过 Firebase 托管在:URL。
我在主页面组件中添加了一些秘密消息(显然未在 GitHub 存储库中显示),该组件受 Guard 保护,使用 FirebaseUI auth 对用户进行身份验证。它们将显示为以下语句:
- “如果破坏 Angular Guard 的秘密消息:< secret-msg >”
- 这个展示给任何可以查看组件 html 的人
- “如果破坏 Firebase 身份验证的秘密消息:< secret-msg >”
- 这个展示给任何可以冒充“admin@nowhere.com”登录的人
有人可以看到这些或解释黑客是如何做到的吗?我希望很清楚这篇文章不是试图鼓励黑客攻击,而只是为了了解 Angular 和 Firebase Auth 使用背后的安全模型(我知道 OAuth 本身是安全的,但不确定我是否在auth.service 中使用它。 ts是)。
angular - 订阅行为主体,再次修改数据&设置值导致死循环
我们有一个向导功能,其中我们有一个延迟加载的模块,它有一个父组件和多个子组件。
HomeGuard
基本上是指服务,如果没有数据,则在我们在服务中设置值并解析防护之后进行 API调用Behaviour Subject
。
这是主题服务的代码
现在,我们有了子路由守卫,即ChildGuard。它基本上订阅了行为主题并检查条件并因此允许进入子组件。
现在,在我们的子路由组件中,每当用户遍历时,我都会更新isActive
在防护内部使用的属性 & 进行检查。
问题是当用户点击浏览器后退按钮时,行为主题中未设置值,并且不允许进入子组件。为了尝试解决方案,在WizardHomeComponent内部,我订阅了requestData observable 并尝试再次修改和设置主题,但这会进入无限循环。
angular - 在 canActivate 中进行延迟,直到获取 IP 地址数据
我正在为我的 Angular 应用程序做一个保护,除了某些 IP,所有用户都应该被重定向到维护页面。我正在使用第三方 API 获取客户端 IP 地址,例如http://api.ipify.org/?format=json
. 我面临的问题是 canActivate 保护在 IP API 发送响应之前执行,因此总是返回 false 然后响应被加载。
canActivate 函数
服务
angular - CanActivate 在 NavigationEnd 之后请求流
我正在尝试在 Angular 中构建一个 SubscriptionGuard。这个 Guard 应该检查用户是否为订阅付费。
我有一个奇怪的问题。我将展示代码并在之后进行解释。
订阅.guard.ts
users.service.ts
如您所见,守卫依赖userSubscriptionStatus()
于users.service.ts
.
在第一个测试阶段,我认为.pipe(take(1))
由于某种奇怪的原因无法正常工作,但经过仔细调试,我注意到问题实际上是 SubscriptionGuard 不断调用 UsersService 中的方法。
我尝试了一切,但我不知道如何解决这个问题。这就是我在控制台中得到的:
https://i.stack.imgur.com/l3p2I.png
有人可以帮忙吗?我真的不知道...
[更新 #1] 我更新了代码。现在它看起来像这样:
订阅.guard.ts
users.service.ts
我的控制台现在看起来像这样......
似乎该服务仅在警卫之后才运行。我真的不知道该怎么做...
angular - 如何让我的警卫在解析器中等待 http 调用?
我有解析器和守卫。在我的基本路由路径上,我有解析器,它可以进行 http 调用 - 获取用于身份验证的令牌。
在儿童路线内,我有警卫的许可。始终守卫在解析器之前执行 - 所以问题是首先执行我的守卫,然后执行 - 我的守卫。
所以解析器看起来像这样:
我怎么能在我的守卫中等待电话
angular - Angular路由器:根据用户的角色导航到不同的路由
我正在编写一个具有以下结构的模拟电子商务应用程序:
- 应用程序
- 授权
- 登录页面
- 注册页面
- auth-routing.module.ts
- auth.module.ts
- 行政
- 根页面
- 管理员路由.module.ts
- admin.modules.ts
- 顾客
- 根页面
- 目录页
- 结帐页面
- 感谢页面
- 客户路由.module.ts
- 客户.module.ts
- 网页未找到
- 应用程序路由.module.ts
- app.module.ts
- app.component.html
- app.component.css
- 授权
基本工作流程应该如下:
- 用户导航到根路径
/
。 - 应用程序检测到他们没有登录,因此将他们重定向到
/signin
. - 他们输入他们的凭据并按登录。
- 如果认证成功,
- 如果用户是管理员,他们会被重定向到
/admin
.admin-router.module.ts
将它们重定向到/admin
.
- 如果用户是客户,他们会被重定向到
/customer
.customer-router.module.ts
将它们重定向到/customer/catalog/<default category ID>
.- 他们将一些产品放入购物车并继续进行
/customer/checkout
。 - 他们下订单并被重定向到
/customer/thankyou
.
- 如果用户是管理员,他们会被重定向到
我不确定的是如何在成功登录后完成重定向。显然,它必须分两个阶段完成:首先到一些公共路径,例如/
然后根据用户的角色要么到/customer
要么到。/admin
第二阶段可能需要由 处理app-routing.module.ts
,可能需要使用警卫,但我不确定该怎么做。
编辑 (2021-04-20)
问题可以总结如下:
我需要的是一种方法(最好是声明性的),/
根据其状态将应用程序从以下路径之一重定向到:
状态 | 小路 |
---|---|
登出 | /auth |
以客户身份登录 | /customer |
以管理员身份登录 | /admin |
angular - 如何防止 canActivate 在 Angular 防护的构造函数中完成 ReplaySubject 之前执行?
我有一个守卫,其构造函数类似于下面的代码片段。
是HelperService.replaySubjectProperty
aReplaySubject
并且包含值在 的构造函数中初始化HelperService
。具体来说,当HelperService
依赖注入器初始化时,它必须从服务器获取一个值并将其存储在ReplaySubject
.
这是服务构造函数的示例。
回到我的警惕,该canActivate
方法需要helperValue
填充数据。换句话说,在服务构造函数中发起的服务器请求完成并在重放主题canActivate
中填充数据之前,不应完成其评估。helperValue
我从我的 Guard 中看到的是构造函数确实this.helperService.replaySubjectProperty.subscribe(...)
按预期调用,但是,http<get>
服务构造函数中的命令尚未完成,并且数据尚未填充到helperValue
属性中。
如何在执行函数评估之前canActivate
等待主题完成填充?helperValue