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

angular - 实施 CanDeactivate Guard 时出错

我目前正在尝试对我的 Angular 应用程序实施 CanDeactivate Guard,该应用程序已经具有 HTTP 拦截器来解析身份验证。但是添加 CanDeactivate 防护会引发错误,如下所述。

我已经在 AppModule 的 providers 数组中注册了实现 CanDeactivate 接口的类。我已经在路由的 canDeactivate 属性中注册了实现 CanDeactivate 接口的类。

实现 CanDeactivate 接口的类:

应用了 Deactivate 防护的组件:

该端点的路由定义:

Module 中的 Providers 数组:

错误

0 投票
1 回答
434 浏览

angular - Angular7: Global Guard - CanDeactivate 接口

我对 Angular 很陌生,但未能找到我正在寻找的答案。

我现在面临的问题是,当我切换到另一条路线时,所有全局错误消息都没有消失。

我试图通过使用 CanDeactivate 接口来解决这个问题。这是我的 canDeactivate 方法:

此方法是在名为 cms-page.guard.ts 的服务中创建的,通过在特定页面中使用它,它似乎工作得很好。例如,如果我在“课程”页面中使用它:

基本上,我所做的是在特定页面上应用 canDeactivate 方法。我想知道是否可以创建一个全局应用 canDeactivate 方法的 Guard,因此当您更改为另一条路线时它适用于所有页面?

0 投票
0 回答
73 浏览

angular - API 调用执行两次

我使用角色守卫。用户只有拥有一定的权限才能访问特定的路由。用户权限是使用应用程序根组件内的登录服务从后端获取的,并存储在配置服务内的集合中。需要时从服务中获取用户权限。问题是我的角色守卫也需要获取用户权限。由于我的用户权限是在应用程序组件中获取的,因此角色保护在用户权限服务响应之前被执行。我被迫再次从角色守卫内部的后端调用数据。理想情况下,我希望只获取一次数据。如何解决这个问题?

内部角色后卫:

这在用户第一次登录后有效。但是如果我刷新页面,权限不会首先存储在 confservice 中。

我的路由:

0 投票
3 回答
3140 浏览

angular - 如何对 http 401 做出角度响应

我有一个 nodejs (express) 作为服务器端,一个 angular 6 作为客户端。在服务器中,我有中间件功能,可以进行会话检查。如果会话无效或不存在,我想向客户端发送响应,以便它可以对其做出反应。我想从服务器返回一个 401 的响应代码,并在客户端制作某种 listener\route-guard\HttpInterceptor,这样 - 它可以管理客户端中的情况(例如,将其重定向到登录页面) . 这是我在服务器中的代码:

如何在 Angular 应用程序中捕捉\收听此响应?

0 投票
1 回答
66 浏览

angular - Angular - 管理文件可以下载吗?

我有一个带有 Angular 的网站。我用jwt. 我知道我们可以使用 Angular Route Guard阻止用户进入受限路线。

通常在 SPA 中,所有路由 (html) 都是可下载的。只是我们通过响应 403 代码来处理服务器中未经授权的路由。因此,用户可以看到 html bu 无法获取任何数据是安全的。但是在一个特定的项目中,我们甚至不希望用户能够看到管理面板的 html(因为他可以了解结构)

任何想法?我应该使用 Route Guard 的常用场景还是应该只使用一个单独的面板(例如在未知目录中)?

0 投票
3 回答
399 浏览

angular - 如果 HTTP GET 请求没有返回数据,如何保护路由?

下面是我的 Angular 应用程序中的一个表格。它填充了来自以下的数据employees.json

当用户单击名称时,将employeeId传递给此方法:

这是我AppRouting模块中的路线:

示例路径:http://localhost:4200/profile/1/4

当用户路由到Profile组件时,调用此代码:

profile.component.ts:

}

profile.component.html:

这是我的employee.service

此代码工作正常,并按预期显示数据。

目前,如果我导航到不存在的路线(例如http://localhost:4200/profile/1/123456789,则该组件将显示为没有数据)。employeeIdProfile

而不是这个,我希望用户被带回PageNotFound组件。

以下是我目前的路线:

有人可以告诉我我需要做哪些改变来实现这个吗?

0 投票
2 回答
1538 浏览

angular - 使用 Observables 时来自 Angular Guard 的导航不起作用

我遇到了一个有趣的问题,当我尝试重定向时,当用户尝试访问他们不应该访问的路由时,我的 Angular Guard 似乎没有做任何事情。

如您所见,我在整个过程中调用了console.log,我看到了我期望的消息,但导航从未发生,最初请求的页面加载正常。这真的让我很难过 - 任何帮助将不胜感激!

守卫

身份验证服务

应用程序 从下面的屏幕截图中可以看到,日志是正确的,我们应该被重定向到仪表板,但登录组件和路由仍然处于激活状态。 包含控制台日志并显示登录路径仍处于活动状态的屏幕截图

0 投票
3 回答
3162 浏览

angular - Angular AuthGuard 不会从订阅内部返回 UrlTree

UrlTree如果防护失败, 我正在尝试实现重定向用户。this.authService.isAuthenticated()返回可观察的。

以下不起作用,但它确实 console false

但是,如果我删除订阅,则以下内容有效:

0 投票
1 回答
1424 浏览

angular - 路由时设置默认查询参数

我有以下路线配置:

我想“自动”包含一些默认的查询参数,当某些东西路由到这个时。

例如:

路由/users变为/users?p=1s&15,当它没有查询参数时。

我只是试图用警卫来做这件事(我什至不确定这是做这件事的最佳选择)。下面是我的一段实际代码:

斯塔克利茨链接

0 投票
1 回答
5837 浏览

angular - 如何防止 Angular 中用户角色的操作

我已经有一个 AuthService 在登录时对用户进行身份验证,并且 AuthGuard 在未登录的情况下阻止访问。

某些页面我通过 UserProfile/Role 限制访问,但现在我需要阻止页面上的操作。

我有像“管理员、经理、支持和代理”这样的角色,从大到小。

如何将级别仅设置为经理或以上以编辑所有人都可以访问的页面上的内容(支持和代理仅限查看)?

这是我当前的 canActivate 方法:

这是我的模块 routing.module.ts

需要修复这两个主题:

data: { roles: [] }1)我只想通过较低级别的线路(如代理);

2)内部组件告诉只有经理可以编辑数据(disable如果角色==支持或代理,则只有一个按钮)