问题标签 [angular-route-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 投票
0 回答
113 浏览

angular - Route guard 中的多个 observable 但只等待一个 - Angular 5

我的应用程序中有一个路由守卫,如果有人成功,我需要检查两个可观察对象,我应该允许路由或阻止。

路线守卫:

因此,如果 isValid() 或 isValidFromApi() 中的任何一个返回 true,则路由保护 canActivate 应该处于活动状态。如何做到这一点?我不想等待这两个调用完成,因为 this.service.details 实际上是一个 BehaviorSubject,它包含 this.service.getKeys() 的响应。

有没有其他方法可以实现这一目标?

提前致谢

0 投票
2 回答
2537 浏览

angular - 如果第一个用户已经登录,如何防止第二个用户在另一个选项卡上登录

我试图防止多个同时登录,如果第一个用户已经登录,它将阻止第二个用户在另一个选项卡上登录,我需要关于我应该做什么的建议,基于谷歌,我可以使用 localstorage 和 authguard,并且有两者都实施但没有解决问题,

身份验证.service.ts

登录组件.ts

当第一个用户已经登录时,通过粘贴登录网址打开第二个选项卡,它可以工作,登录将重定向到用户设置,但是当登录页面已经准备好两个选项卡时,当第一个用户登录时,第二个用户也可以使用不同的登录帐户。

0 投票
1 回答
506 浏览

angular - 在 Angular 中,是否可以根据用户是否经过身份验证来加载不同的模块?

例如,如果用户通过了身份验证,URL:www.example.com 应该加载一个模块,否则它应该加载另一个模块。

我尝试过使用警卫,但它并没有像我预期的那样工作。

我对 Angular 很陌生。如果有人可以编写示例路由数组进行演示,将不胜感激。:)

如果用户未通过身份验证,我希望我的路由能够像下面这样工作:

否则,如果用户已通过身份验证,我希望我的路线能够像下面这样工作:

0 投票
1 回答
2244 浏览

angular - 使用 ngrx 存储进行身份验证的路由保护

我正在尝试创建一个AuthGuard以检查用户是否可以访问路由,否则重定向到登录视图。我想Observable<Boolean|UrlTree>canActivate方法中返回一个。这是我到目前为止所拥有的。

但是,我不确定如何/在哪里可以从 observable 发出一个 UrlTree 以重定向到/login,因为我对这一切都是新手,特别是 rxjs。提前感谢您的帮助。

0 投票
1 回答
194 浏览

angular - Angular 的路由守卫没有在应用程序中运行

我在我的app-routing.module.ts文件中添加了一条带有警卫的路线,如下所示:

如果我尝试完全退出 Angular 应用程序,那么我会看到预期的消息从PendingChangesGuard. 但是,如果我单击 Angular 应用程序中的任何其他路由,则不会执行路由保护。在这种情况下我如何让它运行呢?

这是路由保护文件的样子:

DetailComponent我这样做了:

0 投票
0 回答
348 浏览

angular - CanDeactivate 不适用于使用 Observable 的兄弟模块

我正在使用primeng确认服务在我的组件中实现canDeactivate保护,为用户对提示的回答创建一个可观察的。问题是,当我尝试导航到同级路由并单击是提示时,路由器不会重定向到目标页面。如果我使用简单的确认方法,它可以正常工作,但是使用 Promise 或 Observable,它就不能工作并且没有错误。对于其他非同级模块,它正在工作并重定向。

守门员是:

我在组件中的实现:

如果我像这样实现它,它正在工作。

Angular 的版本是 7.2.7

0 投票
0 回答
709 浏览

angular - Angular 6 在 canDeactivate 保护服务中使用 ngx-sweetalert2 以防止在路由更改或页面刷新时丢失未保存的更改

我想显示一个弹出窗口,警告用户如果他/她试图离开未保存更改的表单。我想使用 ngx-sweetalert2 组件,因为我的大多数应用程序都以类似的方式显示警报。但是,我在网上找不到任何解释这一点的文档或教程。即使 Stackoverflow 上有类似类型的请求(Angular 使用模式对话框在 canDeactivate Guard 服务中进行未提交的更改(表单脏)),它使用引导模式。也许有人可以帮助我从包含的链接中提供的解决方案中集成 ngx-sweetalert2 而不是 ngx-bootstrap。我真的很感激。

谢谢

@BizzyBob 谢谢你的回复。是的,我目前确实让警卫使用简单的确认对话框。请在提供的代码中查看我的实现:

0 投票
2 回答
1356 浏览

angular - 使用 AuthGuard 的不同角色的多个 /Dashboard 路由

我希望我的主页为不同的角色加载不同的模块

AuthGuard 在这里

当 canLoad: [AuthGuard] 返回 false 路由器不检查下一条路由时

或者有没有办法根据 Route 改变 loadChildren

实际上,我想在登录时说,如果学生角色在路线“仪表板”上登录,则在“仪表板”或“”学生模块上加载,或者如果在“仪表板”路线上登录教练角色,则在“”教练模块加载或如果管理员角色已登录,则加载“”管理模块

0 投票
1 回答
428 浏览

angular - 将令牌设置在本地存储中后,如何获取路由保护以验证令牌?

我正在构建一个使用 Angular 和 Express 进行身份验证的简单登录页面。我有以下内容:

  • 登录组件
  • 使用接收到的 jwt 令牌进行 http 调用并设置本地存储的服务
  • 注册页面的路由守卫

我的警卫正在工作,如果没有令牌,它会阻止访问“/注册”路由。因为第一次登录没有令牌,并且当调用登录组件的 onSubmit() 时,守卫似乎在设置令牌之前检查,我必须触发 onSubmit() 两次 - 一次获取密钥,然后另一个登录。我希望能够在输入正确的凭据后立即登录。

我该如何解决这个问题?提前致谢!

登录组件.ts

身份验证服务.service.ts:

auth.guard.ts

0 投票
1 回答
87 浏览

angular - Angular 6 - 基于firestore节点值的Route Guard

我目前正在使用 Firestore 构建一个 Angular 项目。我有一个users集合,其中包含用户uid以及他们的姓名、电子邮件和公司名称。登录后,我可以成功获取用户 uid,在 firestore 中查找文档,然后将它们重定向到domain.com/theircompanyname-theircompanyname即存储在 firestore 中用户集合 > 文档下的内容。

但是,目前这并不能阻止任何人在 URL 中输入公司名称并成功导航到该 URL。我将如何实施一个路由保护,它只授予与 url 中可见的匹配公司的用户访问权限?

登录.ts

user.service.ts 这将根据他们在firestore中的公司名称将用户重定向到适当的URL(我通过将user_id从登录传递到此函数来检查)

以上所有工作。如果可能的话,路线守卫是我需要帮助的地方。

router.guard 这显然不起作用,我真的不知道如何使它起作用。