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

angular - Angular 2 如何在同一路径上应用具有或关系的多个警卫

我的应用程序允许基于用户角色访问内容。我为每个角色编写了一个Router Guard。某些内容允许角色1 或角色2 或角色3 访问。我应该如何在 feature-routing.module.ts 文件中编写 canActivate 声明?据我了解,如果我写

如果任何守卫返回 false,则访问将被拒绝。但就我而言,如果任何警卫返回 true,我应该允许访问。怎么做?提前谢谢了!

0 投票
1 回答
983 浏览

javascript - 找不到应用程序路由提供程序 Angular 2 - 在 canactivate() 之前注入服务

我正在尝试在我的 angular 2 应用程序中注入服务,但是当我在 angular/router 中调用 canactivate() 时,该服务未定义。如何在调用 canactivate() 之前注入服务。 在此处输入图像描述

app.routing.ts

auth.guard.service.ts

app.module.ts

0 投票
0 回答
1473 浏览

angular - 基于 Angular 2 Guard 切换布局组件

所以这可能是一个很长的帖子,但我希望有人能帮助我:)

我正在构建一个具有“拆分”布局的基于 Angular 2 Web 的应用程序,这意味着我将使用单独的布局组件,具体取决于我是否通过路由保护进行了身份验证。

当我第一次进入应用程序并且我没有来自服务器的活动会话或 cookie 时,我将被重定向到登录页面,但前提是该页面受到路由保护的保护。这个登录页面将被放入一个“公共”视图中,其中不包含<header><footer>标签<nav>

这样做的目的是能够为<router-outlet></router-outlet>需要用户登录的视图组件加载一个 HTML 布局,并<router-outlet></router-outlet>在用户尝试访问“私有”路由时在另一个视图组件中加载另一个布局。

在 index.html 中

Routes.ts 文件

然后,在我的私有和公共组件中,我放置了我的“子”路由,只是为了保持我的应用程序干净。

私有路由文件

公共路线文件

我正在加载私有或公共组件,具体取决于用户是否尝试访问受保护的页面。

现在到最后一部分。在我的“布局”文件夹中,我有private.component.htmlpublic.component.html,都包含一个<router-outlet></router-outlet>.

私有组件 html

公共组件 html

我的问题是,我如何注册只有在路由守卫允许的情况下才能访问的路由子级?我需要能够切换布局,因为只有在应用程序本身内部才能查看<nav>示例。

我知道这不是最好的方法,但这就是我设法解决它的方法。随意贡献任何可以帮助我改善这一点的东西。

  • 有什么好的方法可以做到这一点吗?
  • 我是在正确的轨道上,还是完全迷失了方向?

如果你们中的任何人也需要看到这一点,我会为你们提供我的警卫。

这是我的 源代码树的概览

如果我不够清楚,请随时问我。

0 投票
1 回答
776 浏览

angular - 配置 Angular 路由器防护

有什么方法可以配置canActivateAngular 路由器中使用的守卫吗?

有这个SessionGuard

而这条路线:

我想requireLeagues根据路线设置为真或假,而不必创建一个新的、不同的警卫。这可能吗?

0 投票
0 回答
139 浏览

angular - 路由保护没有在 RouterStateSnapshot 中指定正确的路由

我的路线上有一名警卫,以防止未经授权的访问。守卫检查会话并在无效时调用登录服务。我的路线配置如下...

来自Guard的代码片段...

我想在登录后重新路由到最初请求的路由,并尝试使用 RouterStateSnapshot url 来获取请求的路由。但是它总是保留默认指定的路线..

{ path: '', redirectTo: 'home', pathMatch: 'full' },

因此,如果我浏览到“进程”路由,即“ http://localhost:4200/process ”,防护中的 canActivate 将始终在 RouterStateSnapshot url 属性中保存“主”路由。

我已经看到了以下类似的请求... Angular 2 RouterStateSnapshot 没有返回正确的 url

我已经尝试过为每条路线指定不同的警卫的建议(出于绝望),但这不起作用。这肯定不是答案吗?我应该能够在路由之间共享一个身份验证守卫吗?

我正在使用 Angular 4。

0 投票
1 回答
709 浏览

angular - 多个Guards调用异步函数

我有两个警卫,Guard1 和 Guard2。Guard1 返回一个 Observable,Guard2 返回布尔值。

canActivate:[Guard1,Guard2]

假设Guard2会返回false,Guard1的请求会自动取消吗?还是无论如何都会执行呼叫?

0 投票
1 回答
247 浏览

angular - 带有 Firebase 身份验证的 Angular 2 AuthGuard 每次都重定向到登录页面

我尝试使用 firebase-auth 为 Angular 2 应用程序构建 AuthGuard,但存在一个问题。

应用程序加载后如果我因异步操作而登录AuthGuard返回。 最终效果是页面加载时返回 firstime和 then ,因此每次重定向到 signIn 页面而不是根页面。 我认为我只使用 *ngIf 来显示,如果用户没有登录,但这不是解决方案,因为每次 SignInComponent 都会在短时间内可见。 如何解决此问题不立即重定向到登录页面? 谢谢您的回答。false

AuthGuardfalsetrue

SignInComponent





身份验证服务

授权信息

AuthGuard

0 投票
2 回答
1877 浏览

angular - angular2 守卫在页面刷新时不起作用

在每次请求之前,我想确保有可用的用户配置文件。我使用 canActivateChild 守卫来做到这一点。

根据 angular2 的文档,可以返回一个 observable:https ://angular.io/api/router/CanActivateChild

应用程序.routes.ts

canActivatedChild子路由之前执行canActivate

profile.guard.ts:

负载配置文件功能:

当我浏览菜单(<a>with routeLink)时,console.log('profile loaded')作品。但是,如果我用 f5 或通过浏览器重新加载页面,它永远不会到达那里..

console.log('load')总是被执行。

编辑

如果我作为canActivateChild回报:

它工作正常......我明白了console.log('test')

0 投票
0 回答
235 浏览

angular2-routing - 如何在路由发生之前加载 Appcomponent 类

我已经根据用户角色设置了路由并显示页面。为此,我在路线上使用警卫。我正在从 Appcomponent 类的服务中提取 userRole,并在主服务文件中使用 set 和 get 方法。现在的问题是,在我获得角色之前,会发生路由并导航到错误的 url,因为那时它还没有角色。从下一个电话开始很艰难,它可以正常工作。让我分享代码:- 1.这是警卫类:-

  1. 这是我从服务中提取 userRole 的 AppComponent:-

    /li>
  2. 这是我定义了 set 和 get 方法的主要服务:-

    setSavedUserRole(name: any) { console.log('main'+name); this._userRoles = 名称;}

    /li>
0 投票
1 回答
2386 浏览

angular - Auth Guard 应用于 angular2 中的延迟加载模块,但它仍然在重定向,尽管被拒绝 canLoad 不起作用

假设 Return false 将在 http 调用上的身份验证中返回,但现在我从 CanLoadChildren() 方法返回 false 以测试 canLoad 但是尽管调用 canLoad 并返回 false canLoad 仍然加载模块并重定向到该模块。任何人都可以帮助? 谢谢

身份验证服务

验证保护文件

app.router.ts