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

angular - 使用 Angular 8 在浏览器刷新时显示材质对话框

MatDialog我需要在 Angular 8 中使用显示模式弹出窗口(创建一个作为入口组件的组件) 。

注意:我正在强制刷新浏览器(可以是硬重新加载或正常)。我也尝试过使用canActivate警卫window.beforeunload。我在组件中有一个变量。例如,isUtilityChanged如果它是真的,那么需要显示一个弹出窗口,否则不需要。在弹出窗口中,我有两个按钮,即“留下”(不应重新加载)和“离开”(应重新加载)。这是我的代码window.beforeunload

有没有办法使用 Angular 8 在浏览器刷新时显示材质对话框?

0 投票
2 回答
84 浏览

angular - Angular canActivate 提前执行

我已经在 Angular 中设置了我的路由和路由保护,它们非常适合阻止用户访问他们不应该访问的路由。但是,我的所有页面都有一个全局导航部分,它基本上循环遍历我的路由数组并显示所有链接(使用 *ngFor)。我希望在循环遍历它们时评估每个 Route 以查看是否使用 canActivate 该路由。这样,我就不会向用户显示他们无法访问的链接。我想以一种重复使用相同的路由保护逻辑的方式来做到这一点。

我有一系列这样的路线:

模板如下所示:

0 投票
0 回答
68 浏览

angularjs - Angular 子路由(延迟加载到 AppRoutingModule)数据始终是一个空对象 ({})。试图从路由守卫访问它

我已经在这个问题上苦苦挣扎了一周左右,但是我在网上找到(并尝试过)的一切都没有帮助。

我有一个具有以下结构的 AngularJS 项目(Angular v11):

我有以下 AppRoutingModule:

我正在尝试根据当前登录的用户角色限制对应用程序某些 URL 的访问。这可以使用路由守卫来实现,在我的例子中,其他队友创建了 AuthGuard 组件:

我已经稍微修改了这段代码,但我仍然无法从子路由中获取数据。但是,如果我将数据添加到父路由,这将显示为“填充”对象。

在我对这个问题的研究中,我尝试了不同的解决方案,或者只是尝试查看从其​​他组件(AppComponent、DashboardComponent、CampaignListComponent)访问数据时数据是否不为空,但截至目前,无法找到解决方案。

在这里,我给您留下与我尝试实施的解决方案的主题更相关的帖子:

我猜这个问题与延迟加载 DashboardRoutes 有关,但我不完全确定,因为确实加载了来自父路由的数据。无论如何,我希望有人能对此事有所了解。提前致谢。如果您认为需要更多代码,请询问。

0 投票
0 回答
37 浏览

angular - 在延迟加载的守卫之前运行顶级守卫

我发现延迟加载的子路由将在父路由执行它们的解析器(可能还有父路由)之前执行它们的路由canLoad保护。这很不方便。我的子路由守卫依赖于在父解析器中获取的数据,即它们检查是否存在某些数据以允许加载惰性模块。canActivatecanLoadcanLoad

首先运行子路由的原因是什么canLoad?关于这个问题我唯一能找到的就是here

有没有办法改变路由守卫的执行顺序?当前的自下而上执行策略似乎并不正确。理想情况下,守卫会执行自上而下而不是自下而上。

0 投票
2 回答
393 浏览

angular - 角度保护真/假取决于许可

我有 4 条路线,每条路线都有一个链接到它的权限(由后端提供 -> true/false)。这些权限授予登录用户访问特定路由的权限。

现在我的问题是,是否可以只设置一个警卫来检查所有链接权限,但只阻止链接权限为“假”的特定路线?

示例(4 个功能,具有 4 个权限):

守卫只检查特定路由的匹配权限。换句话说,用户只能访问“/subscribe”路由,而不能访问其他三个。

0 投票
1 回答
47 浏览

angular - 为什么当我到达特定路线时我的对象变成空的?

我有个问题。所以,我想在 Angular 中创建一个路由保护,如果用户登录,则不允许用户访问登录页面。如果来自 AuthService 的 BehaviourSubject 发出一个新的用户对象,我会检查他是否登录,但是当我在搜索栏中输入登录页面的 URL,主题发出的用户对象变为空。你知道为什么会这样吗?

这是我的 AuthService 逻辑:

我以这种方式将这个路由守卫添加到路由中:

0 投票
1 回答
46 浏览

angular - 即使存在 cognitoUser,Angular 路由保护也不会呈现仪表板

我正在尝试使用 Cognito 和路由保护来保护我的 Angular 应用程序中的一些视图。基本上我要做的是检查是否存在活动的 Cognito 用户会话,如果是,则加载页面。但是,即使存在有效的 Cognito 用户,该应用程序也会将我重定向回登录页面。我是 Angular 的初学者,所以我对自己错过的东西感到沮丧。

这是canActivate我的角度路由保护中的功能代码。

我已将此防护应用于routesmy 数组中的一些路由,app-routing.module.ts如下所示。

有人可以指出我解决此问题的方法,以便身份验证流程顺利进行吗?高度赞赏所有帮助。

0 投票
1 回答
131 浏览

angular - 将多个模块路由到同一路径

我正在尝试创建一个基于角色的路由系统,其中app-routing模块有多个模块路由到同一路由。

例如。

canActivateRole正在读取以route.data.roles确定它是否可以路由到loadChildren.

注意:我已尝试使用matcher配置路由以加载单独的模块,如 本答案中所示,但是由于我正在使用服务,所以我找不到这样做的方法。如果有一种方法可以使用匹配器中的服务。

更新 1:有些人要求我使用服务来确定要加载的模块,所以我创建了一个近似的canActivate外观。

我尝试做的另一种选择是某种服务,它返回要加载的模块loadChildren

0 投票
1 回答
105 浏览

angular - canActivate 需要等待 this.authService.isLoggedIn 的布尔值

我希望我的应用程序在用户使用他们的谷歌电子邮件登录时路由到家:“”。除了 canActivate routeGuard 之外,一切正常。this.authService.isLoggedIn在 AuthLogin 函数期间尝试导航到“”后返回 false。登录后,routeguard 路由到“login”而不是“”,如果我尝试直接转到“”,它会起作用,因为this.authService.isLoggedIn在 console.log 中显示为 true。所以似乎 canActivate 需要一种方法来等到this.authService.isLoggedIn更新,有什么想法吗?

应用程序路由模块:

身份验证服务:

auth.guard:

0 投票
1 回答
29 浏览

angular - 使用服务将数据从非同级组件传递到 Angular 中的另一个组件

这是我的服务班

这是我的组件1

这是我的另一个组件 2.leave()是 html 中的点击事件。

这是我的路线守卫

但我无法从组件 1 到组件 2 获取数据。还是我需要将服务添加到模块中的任何提供程序。