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

angular - Angular 在 canDeactivate Guard 服务中使用模态对话框进行未提交的更改(表单脏)

在我的 Angular 4 应用程序中,我有一些带有表单的组件,如下所示:

他们使用 Guard 服务来防止未提交的更改丢失,因此如果用户在请求确认之前尝试更改路由:

这是使用一个简单的confirm(...)对话框,它工作得很好。

但是,我想用更花哨的模态对话框替换这个简单的对话框,例如使用ngx-bootstrap Modal

我怎样才能使用模态来实现相同的结果?

0 投票
1 回答
327 浏览

angular - 使用 ASP.NET Web Api 2 在 angular4 中带有防护的解析器

我正在使用 Asp.NET Web API 2 处理 angular 4 项目。我想在用户进入管理部分之前检查用户是否已获得授权。我试图在角度的路由中设置解析器,如下所示:

setAuthorized() 函数将在全局变量中设置授权,以便可以使用函数 isAuthorized() 和授权保护来检查它:

路由是:

一切似乎都正常工作。但问题是当我单击 F5 或复制 URL 并在新窗口中打开它时,我总是会被重定向到错误页面。当我监控工作流时,它显示当我尝试直接访问 URL 时它没有调用解析器:

本地主机/管理员

我没有收到任何错误,但我总是被重定向。有任何想法吗?

0 投票
2 回答
1719 浏览

angular - Angular 2+:canLoad 使用

我正在尝试将该canLoad功能与路线一起使用,但它似乎不起作用。

我不知道为什么,也许你不能用它canActivate什么的,但既然我不知道,我以为有人会在这里。

代码运行,当使用 aot 编译时,我得到这个:

但是当我转到模块时,控制台日志还没有完成。

这是我的路线代码:

logs.module(主路由,看成app.module)

admin.module(suiviprod 和 Pilotage 是一样的,只是路线和组件不同)

authguard.service(如果本地存储有令牌,canActivate 返回 true)

编辑警卫使用的canActivate功能(适用于canActivateand canActivateChild):

0 投票
1 回答
2009 浏览

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

我有这个AuthGuard

我已经在我的AppModule

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

我得到这个错误:

在此处输入图像描述

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

编辑: 我正在使用 Angular 4.4.6

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

**我的 tsconfig.json:**

0 投票
1 回答
383 浏览

angular - How can I protect a URL based on the input of an Angular Material Dialog using a Guard?

Goal:

I have a specific URL protected using a Guard. When a user attempts to access that URL I have an Angular 4 material dialog open. Based on the dialog input, I want to authorize or not authorize the user.

Issue:

In the Guard I subscribe to the dialog. On close I receive the dialog input. When the user attempts to access the URL, canActivate is automatically evaluated to false without waiting for user input. In other words, the modal is subscribed to, but false is returned immediately because the function does not wait for the dialog to close.

Question:

How can I authorize or not authorize a user to a URL based on user input?

Guard:

Dialog:

0 投票
1 回答
216 浏览

angular - 如何让守卫订阅Angular 2中服务的长轮询请求

我正在尝试制作旧时尚应用程序的 Angular 2 版本。有一项服务会向服务器发送重复请求以检查用户是否正在登录。登录守卫将检查轮询以查看登录会话结果(从请求中获取)是否有效,以向路由返回正确的信号。

这是我的服务的功能:

getUser(): Observable<User> { return this.http.get<User>(this.userUrl); }

这是我的后卫的 canActive 功能:

canActivate( next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean { // const isLoggedIn = this.authService.isLoggedIn(); return this.authService.getUser().flatMap((data) => { console.log(data); if (data.id === 1 && data.name === 'Beany' ) { console.log(1111) return Observable.of(true); } else { console.log(2222) this.router.navigate(['pages/login']); return Observable.of(false); } });

该路线有效,但只有 1 次。不确定是否可以重复此操作(当请求完成时,服务将重新向服务发送检查,当然我应该为此设置一点超时)?

0 投票
3 回答
6813 浏览

angular - 如何使用 Angular 的 canActivate 来否定守卫的结果?

从 Angular 文档上看,如果函数最终返回canActivate,您似乎只能使用canActivate守卫来允许继续执行路由。canActivatetrue

canActivate有没有办法说,“只有在班级评估为”时才继续这条路线false

例如,为了不允许登录用户访问登录页面,我尝试了这个,但它不起作用:

我在控制台中收到此错误:

0 投票
1 回答
847 浏览

angular - Angular 4 在第一次完成后调用一个 observable 然后返回一个值

我有一个大问题,经过数小时阅读文档和解决方案后,我找不到如何解决这个问题:

基本上我在我的角度保护中有这个:

我要做的是首先调用服务 authService.login,如果我通过了身份验证,那么我调用 authService.grants 来检查用户是否可以阅读此页面。

就这么简单,但我无法进入第二个电话,我不知道为什么它会返回一个可观察的。

0 投票
1 回答
765 浏览

javascript - Angular2,工厂守卫可以吗?

我对我的网站有很多信任,所以为了建立安全路线,我建立了下一个守卫:

因此,在路线中,我可以添加警卫,例如canActivate: [TrustGuard]

问题是我有太多的信任,因此我需要为每个信任建立一个后卫。所以我正在尝试建立一个警卫工厂,以避免实施太多类似的警卫。

我的目标是找到设置路线的方式 canActivate: [FactoryTrustGuard(Trust.seeDashboard)]

这可能吗?

0 投票
1 回答
566 浏览

angular - 路由器 canActivateChild 有超过 1 个保护

我正在使用多个 canActivateChild 守卫,如下所示:

以下是管理员守卫的定义:

我有非常相似的员工警卫,我正在检查作为员工的角色。上面代码的问题是:

  1. 如果我的第一个守卫返回 false,则根本不执行第二个守卫。
  2. 如果我的第一个守卫返回 true,而我的第二个守卫返回 false。这条路线当时也失败了。

注意:我的警卫是同步的,但我仍然面临这个问题。请让我知道我该如何解决?

实际的代码比这复杂得多。这只是获取帮助的示例代码。