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

angular - 返回一个 Observable来自 canActivate 方法并重定向为 false

我一直在寻找没有运气的解决方案。如果用户被授权,我需要调用服务器,并且我需要 canActivate 方法来等待该调用的结果。但我似乎无法拼凑起来。下面是我的代码,我的问题在代码的注释中。

身份验证服务

0 投票
2 回答
13411 浏览

angular - 在 Angular 5 上等待 Guard 内部的 http

我在 Angular 应用程序上使用 Guard 来解析初始关键数据。在 Angular 的第 4 版上,我是这样处理的:

由于Angular 5 上的新版本 Http不再使用该.map()属性,因此这不起作用。

如果我更改.map().subscribe()不会引发任何错误,但应用程序永远不会正确解决。另一方面,使用.first()和/或.map()抛出一些错误,正如在这个版本中所预期的那样。

在这种情况下我该怎么办?

仅当加载初始数据时,我才需要激活该路由。


编辑以添加有关该apiGet功能的信息:

0 投票
1 回答
2009 浏览

angular - 无法解析 AuthGuard 的所有参数

我有这个AuthGuard

我已经在我的AppModule

我试图在我的路由模块中使用这个守卫,如下所示:

我得到这个错误:

在此处输入图像描述

我错过了什么?这个错误的根源在哪里?

编辑: 我正在使用 Angular 4.4.6

当我使用基本路由保护并更新路由配置时,它工作正常:

**我的 tsconfig.json:**

0 投票
1 回答
1580 浏览

angular - 刷新 Angular 应用程序时,它会忽略当前 URL 并返回到根 URl

如果我的 Angular 应用程序,如果我导航(通过明确输入 URL 或单击页面链接)到http://localhost:4200/#/sign-in页面加载正常并显示我的登录表单。如果我随后Refresh在浏览器中单击,我将返回到根页面http://localhost:4200/#/

我的路由器很简单:

我在用

  • 视窗 8
  • 铬 62
  • @angular/core": "^4.2.4
  • @angular/router": "^4.2.4

任何想法为什么会发生这种情况?

0 投票
1 回答
584 浏览

angular - Angular Route Resolve Guards - 需要帮助

问题描述

在我的应用程序中,我使用的是 JWT 身份验证。在令牌的有效负载中,我存储了用户 ID。登录后,或者当用户刷新页面并且仍然有一个有效的令牌时,我使用令牌中的 id 从我的后端检索有关用户的一些信息。我需要在依赖它们的应用程序的多个组件之间共享这些信息。

当前解决方案

我有一项服务可以检索这些信息并将其存储在一个对象中。依赖这些信息才能正常工作的组件会在其中注入此服务(服务是单例),并在其布局顶部有一个 *ngIf 以避免在信息不存在时显示任何内容。

可能的替代解决方案(Route Resolves)

我最近发现了路由解析守卫。这些对我有用吗?我可以实现一个警卫,要求在显示页面之前加载信息,并将其添加到所有需要它们的路由中。

  • 那些警卫像服务一样工作吗?
  • 这些可以注入组件中吗?他们是单身人士吗?
  • 如果我将包含用户信息的对象返回给路由(我会在第一次加载后将对象存储在路由保护中,以避免不必要的 api 调用),这将是保护内部存在的同一个对象还是副本?(如果我需要修改它)(如本教程中所述http://www.callibrity.com/blog/angular-2-route-resolves

谢谢

0 投票
1 回答
1180 浏览

node.js - 角度路线守卫有多安全?

我正在创建一个在线商店,并且有一个管理部分,您可以在其中跟踪订单并修改它们。

它受到身份验证的保护,这是在节点服务器上完成的,密码被散列到数据库等中,但我担心路由保护仍然被绕过。

0 投票
1 回答
4032 浏览

angular - 关闭 Angular 5 路由

我们正在开发一个 SPA。在某些情况下,它的一部分被渲染到另一个应用程序中(作为标记的一部分)。在这种情况下,我们不希望在我们的应用程序中使用路由,因为我们可能会从其他应用程序“窃取”它。是否有可能在 Angular 中“关闭”路由?还是忽略未知路线?

我试过了

  • router.resetConfig 配置为空>“无法匹配任何路由”-出现错误。
  • 在单独的通配符路由上使用 CanActivate 防护,它总是返回 false -> 相同的问题
  • 在单独的通配符路由上使用 CanLoad-Guard -> 当不使用 #-routing 时,这似乎有效。但是我们正在使用#-routing,并且由于 AOT,我还没有找到在运行时切换 useHash-Value 的方法。

正在工作的是,完全删除 RouteModule.forRoot(...)-Import - 但当然在这种情况下,应用程序的其余部分完全被破坏了。

这是 CanLoad-Guard 的一次尝试:

0 投票
3 回答
5401 浏览

angular - 如果未保存更改,Angular 2/4 会阻止用户离开组件

我有这个界面用来防止用户离开页面

在我的一个组件中,我有以下代码

我的问题是我的组件 - >(组件:ComponentCanDeactivate)来自 PendingChangesGuard 始终为空,所以我收到一条错误消息

无法调用 null 的 canDeactivate()

我的路由中也有这个设置

有人可以告诉我我在做什么错吗?

0 投票
1 回答
4178 浏览

angular - 访问 canActivate Guard 中的 ActivatedRoute 组件

据我所知,调用签名canActivate如下所示:

我有一个服务,它需要一个组件的名称并返回访问该组件所需的用户角色,以便我可以检查canActivate我的警卫的功能,活动用户是否具有相应的角色。我的问题是,我不知道如何访问该组件。经过一番谷歌搜索后,我找到了这样的解决方案:

但就我而言,我只是收到一个错误:“无法读取未定义的属性'名称'”。如何访问活动 Route 的组件,尤其是名称作为字符串?

编辑

我发现,我确实在父路线上检查了这个守卫。当我在子路线中检查它时,它可以工作。如何从父组件访问子组件ActivatedRouteSnapshot

0 投票
2 回答
9385 浏览

angular - Auth guard not working in angular 5

Here is my static login service

My authguard service

my app.routing.ts

app.module.ts

I just tested this by entering a route directly in browser url for example /home which has canactivate enabled in its route config but when i do so the home contents are displayed instead of redirecting to the login page.Need too know what's wrong here any help will be really appreciated thanks in advance :)