问题标签 [angular2-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 - 如何在 ng2 guard canActivate 中获取目标路由?
如何获取用户尝试在角度 2 的 canActivate 防护中打开的路线?
我怎样才能让守卫监视每个路由参数的变化,例如。路线内的ID更改?
Angular 2中的建议答案get current route in guard usingprivate state: RouterStateSnapshot
然后this.route.url
对我不起作用,因为它会引发 DI 错误:
angular - 如果至少有一名警卫处于活动状态,则前往路线
Angular2 路由中的守卫按照它们提供的顺序运行。但是对于带有 observable 的守卫,即使第一个守卫为真,angular 也会忽略它,并且只应用第二个守卫的 observable 的结果。
我该如何解决这个问题?
第一后卫:
第二后卫:
angular - 无法使用 angular2 中的服务传递数据
PS:
当我和我的同事交谈时,他们告诉我一次请求就可以让角色正确,如果它没有经过身份验证则拒绝,否则将数据返回到前端。但是,我被困在使用 Angular2 的 Guard 中。
应用程序可以:
- 访问我的路由并
Guard
阻止它,Guard 向服务器发送请求以检查其身份验证。 server
当服务器返回时请求statue:true
,data:[somedatas]
然后使用模块的 dataService 设置数据,并解析true
为 canActivate。- 初始化目标组件, in
constructor
,用于dataService
获取元数据。
但是,我未能将数据从我的 Guard 传递给 Service。我在同一个模块中提供它们。这是我的代码:
模块.ts:
路线:
我的数据服务.ts:
Guard.ts:
谢谢。
======================补充2017-02-17 17:34=================== ===
应用模块路线:
主要路线:
分享路线:
我发现我DocService
在 MainModule 或 AppModule 中提供了,我可以从 @mxii 代码中获取数据。但是,当我将此服务设置为 DocsModule 或 ShareModule 时,我无法获取数据。
angular - Using BehaviorSubject in auth-guard's canActivate
What I want to achieve: I want to share authentication state across my application using BehaviorSubject. I use the authentication state e.g. inside an auth-guard to prevent the user from visiting login/register pages when the user already is authenticated.
Problem: because the BehaviorSubject has a initial value, which is false (not logged in), it seems that the auth-guard takes this first value, instead of waiting for the uid-sync.
AuthInfo (Auth state store):
AuthService:
AuthGuard:
So canActivate is processed with authInfo.isLoggedIn()
being false
and after a fraction of a second I see Got the uid
in the console. Any ideas how to prevent the first false
? I think that BehaviorSubject is correctly used here, because it allows us to set an initial state. However the auth-guard will always receive false (the initial value). Right after that the
will trigger, when the canActivate method was already finished.
javascript - Angular2 路由守卫返回 Observable, 如何处理错误
我有一个像下面这样的路线守卫
问题是有时 getAuthenticatedUser 返回 401,我有一个 http-interceptor 处理 401 并重定向到登录页面。问题是这个 .map 永远不会解决,因为 http 请求抛出错误,并且角度路由器卡在第一个路由请求上并且无法处理来自拦截器的后续请求。我该如何处理这个错误并让 Observable 返回的解析为 false 并让事情继续进行?
和下面的http拦截器
angular - 试图了解 CanActivate 和 CanActivateChild 之间的区别
所以,我试图通过使用警卫来保护对多条路线的访问。我正在使用以下路线这样做:
看看是什么AuthGuardService
样子的
canActivate
当我尝试仅使用(已注释)访问“/admin”和“/admin/edit”时canActivateChild
,控制台显示
当我移除canActivate
并canActivateChild
带回控制台显示
当我保留两者时,它会回到显示Guarding...
。所以,我的问题是什么canActivateChild
时候canActivate
保护根元素和子元素的目的是什么?
PS:我得到它canActivateChild
在子路由激活之前运行。但是这样做有什么好处呢?只保留其中一个还不够吗?
routing - 如果表单无效,如何阻止导航到其他选项卡
我有一个基于 ionic2 标签的应用程序。在一个标签上,我有一个表格。我希望应用程序在我切换到另一个选项卡时阻止,并且表单无效。
在 ng2 中,我可以在这类场景中使用routeGuard,但是在 ionic2 中是否有针对这种场景的解决方案?
从其他帖子中,我了解到 ionic2 不适用于路由,就像 Angular 2 一样。
谁能给我一个提示?
angular - 如何在使用 Angular2 Guards 执行 canActivate 之前从服务响应中获取数据
我正在尝试实现一个保护,以检查用户是否在访问视图之前保存了某些配置参数。配置表单和我要保护的视图都是分开的。
为此,我一直在尝试从服务(后端 API)获取配置参数,因此我能够检查所需的填充是否不为空,因此我可以在 canActivate 方法中返回 true 或 false,并使用路由器导航。
我尝试从 Guard 类的构造函数和 canActivate 方法获取响应,却发现甚至没有调用该服务。我也试过用 OnInit 实现这个类,但没有运气。
如何使 canActivate 方法在返回值 ture 或 false 之前等待 API 响应?
先感谢您!
快速编辑。我尝试了几件事,包括这些:
也试过:
并尝试使用 ngOnInit
这些选项都不起作用。我还尝试了一个服务调用方法,它返回一个布尔值,让我知道它从服务获取的配置中的参数是否正确,但没有骰子。我猜验证必须在服务器端进行?
angular - 无法解析路由器 CanActivate 的所有参数
我正在尝试实施授权保护https://angular.io/docs/ts/latest/guide/router.html#!#can-activate-child-guard
但我得到一个 DI 错误,我真的不知道为什么我UserService
在我的模块中注入我的。
我RouteGuard
在全局模块中声明,我UserService
也是
错误:
代码
angular - 如何再次制作 Angular2 Service Singleton....
请允许我再次问这个问题,关于如何在 angular2 中进行单例服务。我正在尝试通过注入身份验证服务来实现身份验证防护。
但是,每当我访问受 auth guard 保护的路由时,总是会调用注入服务的构造函数。即 "console.log("authgaurd created")" 和 "console.log("auth services created");" 在下面的代码段中,每次都被调用而不是一次。
我遵循了类似问题中提出的指导方针,包括:如何制作 Angular2 服务单例?
但看起来我可能遗漏了一些东西......帮助?
使用 @angular/core": "^2.3.1
服务
受保护的模块和路由