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

angular - 如何在没有 Angular 前缀“localhost:xxxx”的情况下导航到外部 URL?

我正在尝试编写一个守卫,如果用户未登录,则重定向到外部服务(例如 Instagram),

locationAngular 的一个实例在哪里Location,而 URI 是

当这个守卫触发时,Angular 会尝试导航到

当然,这失败了。我尝试使用

同样,结果完全相同,所以我不确定这确实与 Angular 相关。任何指针?

0 投票
2 回答
3347 浏览

angular - 将路由器保护应用于除一个之外的所有孩子

目前,在 Angular 中,您可以通过将路由器保护应用于其中一个父路由来限制对所有子路由的访问:

这对于避免canActivate在每条路由中重复防护很有用。但是现在当我想引入第三条路线时会发生什么my-account?例如,可能有一个可公开访问的帮助页面my-account/help,每个人都应该能够访问,即使他们没有登录:

有没有一种干净的方法来做到这一点,或者是唯一的方法来破坏路由的组织并将路由器保护手动应用于每个子路由,除了帮助页面?

0 投票
2 回答
125 浏览

javascript - 如何在angular4中保护路线

我的应用程序中有登录/创建帐户。如果用户已经登录,我希望用户将无法看到登录/创建帐户。我正在使用 Authguard 来保护路由:

在这种情况下,页面将进入无限循环。

这是我的路线:

请帮忙。我想要它用于登录和创建帐户。

0 投票
1 回答
337 浏览

angular - Angular 2+ Routing -- 基于用户输入的路由

目前在我们的项目中,我们正在使用 Angular 的路由器来定义我们的路由。我们有一个向导式的单页应用程序,每个页面上都有下一个和上一个按钮,分别定义要转到下一个和上一个的路线。这些下一个和上一个按钮是在每个页面上基于来自前一页的用户输入用条件逻辑实现的(例如,如果用户从前一页选择“选项1 和选择1”,则转到页面X,否则转到页面Y)。这在大多数情况下都有效;但是,随着我们添加更多需要更多条件逻辑的页面,这可能会失控。

有没有办法简化这个过程?我研究了 Angular 路由器保护,虽然它们提供了一种在应用程序在调用路由时没有必要数据时将用户重定向到特定页面的方法,但我认为它们不是我们的样子寻找。

0 投票
1 回答
1416 浏览

angular - CanActivate 路由保护没有被调用

//看守服务

因此,当登录页面加载时,它不会调用可以激活方法和打印控制台。我创建了一个警卫服务并在路由中添加了 CanActivate 属性。

0 投票
1 回答
1805 浏览

angular - Angular CanDeactivate Router Guard 具有可观察的订阅值

我一直在尝试编写一个 canDeactivate 守卫来检查可观察流中的保存状态并相应地工作。

我的服务是这样的

我的守卫是

基本上,它从服务中获取 SavingState 的值并根据状态返回,因此路由器的 canDeactivate 属性接收一个布尔值。由于守卫中的值 this.savingState 始终是订阅的,我认为下面的条件没有问题。

通过一些搜索,我发现了这个答案并尝试将保护代码作为

当然,我在这里将 first() 导入为import 'rxjs/add/operator/first';.

它从守卫返回一个可观察的,只是为了看看它是否工作正常,或者这是否与我返回的方式有关。但是,在这两种情况下,我都会收到如下图所示的错误。

在此处输入图像描述

我在导入路由器配置的模块内提供了路由器保护。这也是提供服务的地方。

我在这里做错了什么?我是使用路由器防护的新手(尤其是可以使用可观察的 canDeactivate ),感谢您提供任何帮助。

0 投票
1 回答
6327 浏览

angular - Angular - 跨不同模块提供防护

基本上我目前有以下 Angular 模块:

  1. landing
  2. admin
  3. core
  4. shared

我想要的是注册一个在模块AuthenticationGuard内调用的新警卫shared,并在不同的模块中提供它。

目前它只有在我在landing-module(这是我引导的那个)中注册警卫时才有效,如果我在admin.moduleor中注册它也不起作用shared.module

如果我这样做,我会收到一条错误消息,说明如下:

在此处输入图像描述

的注册guard是通过providers相应模块的数组完成的。

我的目标是能够在所有模块中使用它。

core从模块内注入服务没有问题- 所以我认为两者之间admin肯定存在差异?guardsservices

目前一些相关文件看起来像这样(为简洁起见缩短):

登陆模块.ts

登陆.路由.模块

管理模块

admin.routing.module

共享模块

auth-guard.service

0 投票
1 回答
541 浏览

angular - Angular 5 延迟加载的模块路径相互重叠

我有一个带有两个延迟加载模块的应用程序。

主要模块:

子模块 1(GuestModule):

子模块 2 (UserModule):

当我路由到 /guest/overview/1 时,它总是命中 UserAuthGuard。子路由相互重叠是否正常?

有没有办法通过配置而不是更改名称来区分它们?

我使用 angular 5.2.9 和 angular cli 1.7.3。

0 投票
1 回答
564 浏览

angular - Angular 4中是否有canActivate的选项/变量

我想根据用户拥有的权限拒绝访问路由。所以我的 mongoDb 里面有一张桌子,里面有 userRights 和两个简单​​的守卫。一种用于登录用户,一种用于管理员。

所以现在我想给用户访问特定路线的权利。因此我想添加我的canActivate: [checkForRightGuard]哪个被正确解析所以检查但我会怎么做呢?

我考虑过这个解决方案,因为我认为我不必为我必须检查的每一项权利创建一个警卫 - 或者?

所以我虽然关于某事。像这样(当然,这不起作用,但我认为它显示了我需要的东西)

0 投票
0 回答
89 浏览

angular - 使用路由使用客户端 ID 初始化 Angular2 应用程序

我正在尝试通过使用路由为其提供客户端 ID 来启动我的应用程序:

www.mysite.com/11298/[任何页面]

11298 将是客户端 ID,用户可以导航到该路由下的任何页面。所以基本上 clientId 将始终在地址中,无论子路由是什么。路由器配置如下:

我目前在路由上使用 InitializeGuard,如果我可以从该服务访问 :clientId 将是理想的。这可能吗?如果用户总是导航到 www.mysite.com/14918,我可以只读取 StartPageComponent 中的 id,但我不知道用户会去哪条路线。

我如何在不将一些订阅代码重写到我应用程序的每个组件中的情况下读取用户访问的 :clientId?如果我可以将 :clientId 传递给 InitializeGuard 进行 init 并且它会以非侵入方式处理它,那将是非常酷的。

如果不可能,那么另一种方法是什么?我正在考虑为 init 提供一个共享服务,但我仍然必须在所有 PageXComponents 中执行 init,这听起来不太好。

如果这不能作为一种策略,那么在导航时将站点范围的 clientId 传递给每条路线的好策略是什么?