问题标签 [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 投票
2 回答
2511 浏览

angular - Angular 从 kerberos 身份验证中获取数据

我有一个带有后端的角度应用程序。在应用程序启动之前,身份验证由带有 Kerberos 的浏览器管理。响应包含一个 JWT,其中包含角色。

我的方法是在应用程序开始获取用户凭据时对服务器进行额外的 HTTP 调用。这是通过 in 实现的APP_INITIALIZERapp.module.ts因此在应用程序启动时我已经拥有凭据。

这工作正常。但我的问题是:我是否必须打一个额外的电话,或者有没有办法从浏览器请求中获得响应?

如果是:怎么可能?

如果否:是否APP_INITIALIZER推荐只获取一次数据的方法?或者我应该使用 HTTP 调用来保护所有路由route guard

0 投票
1 回答
682 浏览

angular - Angular 4 - 直接启动子路由url时如何重定向到父路由?

要求非常简单。当直接在浏览器中输入子路由/组件的 URL 时,我应该能够将其重定向到父路由。
问题:
1.如何识别页面刷新或子路由是否正在直接启动?
2. 如果直接启动子路由,如何从ActivatedRoute对象中获取其父路由url?

已尝试的解决方案:
我的子组件的 OnInit 中有以下代码:

从父路由导航时,将记录路由器事件。但是当直接启动子 URL 时,不会记录任何事件。
还尝试了路由配置中的canActivateChild,但不知道如何确定是否加载了父组件?
任何帮助表示赞赏。提前致谢!

0 投票
1 回答
3840 浏览

angular - CanActivate 在父 Resolve 完成之前运行子路由上的守卫

我正在尝试在导航到儿童路线之前解析数据,因为我必须在儿童警卫中使用该数据。问题是父解析器,在子守卫被解雇后解析数据。解析器需要很长时间才能解析数据

在这里,父解析器(即 SiteResolver)在子守卫(即 RouteGuard)被调用后解析。我想要的是 SiteResolver 首先解析数据,然后 RouteGuard 应该触发,我该如何实现?

0 投票
3 回答
1766 浏览

angular - 如何在多级嵌套函数中等待异步http订阅完成

我是 Rxjs 的新手。我正在尝试为我的 nativescript-angular 应用程序实现一个 canActivate 保护。基本上,如果用户在存储中有 JWT 令牌,它将尝试从服务器检查 JWT 的有效性,如果令牌仍然有效则登陆主页,如果令牌无效则重定向到登录页面。以下代码在服务器启动时工作正常,但是,当服务器关闭时,它将登陆一个不完整的主页,因为无法从服务器获取数据。发生这种情况是因为同步if(this.authService.isLoggedIn())不等待异步 http 调用并返回 true(下面的代码)。我希望它通过在服务器关闭时阻塞来重定向到登录页面而不是主页,我尝试了各种方法(甚至重构代码)但它们都不起作用。这个这个与我的情况非常相似,但解决方案没有帮助。这是我的代码:

编辑:auth.service.ts(更新)

auth-guard.service.ts

app.routing.ts

Edit2:我尝试了这些代码:

auth-guard.service.ts

auth.service.ts

这是控制台输出:

编辑3:

tsconfig.json

请提前告知和感谢。

0 投票
1 回答
10430 浏览

angular - Angular:如何在RouteGuard中相对于目标路由调用router.navigate()?

我有一个使用 Angular 4 开发的现有项目。我需要根据用户权限控制对特定路由的访问。简化的路由配置如下所示:

现在,我想控制对www.myWeb.com/myApp/product/categoryA. 如果用户没有足够的权限,他/她将被重定向到... /product/CategoryB. 我写了一个CanActivateRouteGuard 来做到这一点,警卫类看起来像这样:

一切正常,但我希望相对于目标路由进行重定向,如下所示:

不幸的是,relativeTo只接受ActivatedRoute对象,我所拥有的只是ActivatedRouteSnapshotand RouterStateSnapshot。有没有办法相对于目标路线进行导航(在这种情况下为 categoryA)?任何帮助将不胜感激。

笔记:

  • 除了添加一些路由保护之外,我无法更改路由配置。
  • 我不是在寻找this.router.navigateByUrl使用state.url. 我想用router.navigate([...], { relativeTo: this-is-what-need}).
0 投票
1 回答
403 浏览

angular - 角度路由守卫为可观察返回错误值

我正在尝试使用路由保护来检查我在访问路由之前是否登录了用户。为此,如果用户登录,我有一个 replaySubject 包含 true。当我调用我的方法来检查用户是否登录时,它的值为 true,但是当在 canActivate 方法中调用相同的方法时,它的值为空,所以它确实不返回任何东西。

canActivate方法:

isLoggedIn方法:

loggedIn主题:

链接:

checkLogin方法:

路由模块:

角度版本:5.2.8,角度路由器版本:5.2.8

0 投票
1 回答
960 浏览

angular - 在执行逻辑时可以激活路由保护角度不能满足接口

我有以下可以激活路由保护类

我不断收到错误:

/home/rickus/Documents/softwareProjects/211hospitality/suitsandtables/frontend/suitsandtables/src/app/services/userservice/authguardservices/isclientuserguard.ts (31,44) 中的错误:声明类型既不是“void”也不是“的函数any' 必须返回一个值。

我希望路由守卫接收用户权限检查属性是否为真,并根据条件为假或真重定向到页面。

我觉得我的代码是正确的,这是一个界面问题。我可以做些什么来满足界面?

我究竟做错了什么?

我根据下面的答案进行了以下编辑,但我现在不得不处理一个新错误。

在运行时出现新错误:

0 投票
2 回答
5805 浏览

angular - 可以激活守卫并使用其中 angular 5 的 observables

我正在使用实现 canActivate 的路由保护

我在代码中放置了一堆控制台日志,以了解它失败的地方。

如果我导航到受保护的路线,会发生什么。导航失败,因为守卫未能返回值。我拥有的 http 地图尚未完成。

我目前有一个 JWT 令牌保存在我的会话存储中,但没有保存在我的本地

这些是我运行警卫时得到的控制台日志

running the local check

running the session check

got session token authorizing it

然后http映射回来,然后代码中断。

完整代码如下。帮助将不胜感激!

0 投票
2 回答
542 浏览

angular - 在Angular 5中使用无组件路由路由到子节点时的意外行为

我有一个关于 Angular 5 路由的问题。

如果我在下面声明这样的路由,route guard则每次我通过routerLinkhtml 路由到其中一个组件时都会调用 。

但是,如果我使用路由声明它componentless,则仅在应用程序启动时才调用守卫。当我在 html 中切换路由时,再也不会调用守卫了。

为什么每次路由到组件时都不会调用无组件父路由的场景中的路由保护?

0 投票
1 回答
59 浏览

angular - Route Guard:如何根据服务器发送的列表使Route Guard为真?

我试图在我的应用程序中使用路由保护,它应该让你只有在服务器向你发送一些参数时才可以访问一个组件。

这是服务器可以发给我的参数列表(不是每次都发)

我的路线守卫:

现在,当某些参数是否发送时,我如何判断它是否为真?userActions=[] 正确吗?例如,当发送 AGREEMENTS_VIEW PROSPECTS_VIEW 时,它应该变为“真”。

还有,这样可以吗?

发帖: