问题标签 [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.
angular - Angular 2 如何在同一路径上应用具有或关系的多个警卫
我的应用程序允许基于用户角色访问内容。我为每个角色编写了一个Router Guard。某些内容允许角色1 或角色2 或角色3 访问。我应该如何在 feature-routing.module.ts 文件中编写 canActivate 声明?据我了解,如果我写
如果任何守卫返回 false,则访问将被拒绝。但就我而言,如果任何警卫返回 true,我应该允许访问。怎么做?提前谢谢了!
javascript - 找不到应用程序路由提供程序 Angular 2 - 在 canactivate() 之前注入服务
我正在尝试在我的 angular 2 应用程序中注入服务,但是当我在 angular/router 中调用 canactivate() 时,该服务未定义。如何在调用 canactivate() 之前注入服务。 在此处输入图像描述
app.routing.ts
auth.guard.service.ts
app.module.ts
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.html
和public.component.html
,都包含一个<router-outlet></router-outlet>
.
私有组件 html
公共组件 html
我的问题是,我如何注册只有在路由守卫允许的情况下才能访问的路由子级?我需要能够切换布局,因为只有在应用程序本身内部才能查看<nav>
示例。
我知道这不是最好的方法,但这就是我设法解决它的方法。随意贡献任何可以帮助我改善这一点的东西。
- 有什么好的方法可以做到这一点吗?
- 我是在正确的轨道上,还是完全迷失了方向?
如果你们中的任何人也需要看到这一点,我会为你们提供我的警卫。
这是我的 源代码树的概览
如果我不够清楚,请随时问我。
angular - 配置 Angular 路由器防护
有什么方法可以配置canActivate
Angular 路由器中使用的守卫吗?
有这个SessionGuard
:
而这条路线:
我想requireLeagues
根据路线设置为真或假,而不必创建一个新的、不同的警卫。这可能吗?
angular - 路由保护没有在 RouterStateSnapshot 中指定正确的路由
我的路线上有一名警卫,以防止未经授权的访问。守卫检查会话并在无效时调用登录服务。我的路线配置如下...
来自Guard的代码片段...
我想在登录后重新路由到最初请求的路由,并尝试使用 RouterStateSnapshot url 来获取请求的路由。但是它总是保留默认指定的路线..
{ path: '', redirectTo: 'home', pathMatch: 'full' },
因此,如果我浏览到“进程”路由,即“ http://localhost:4200/process ”,防护中的 canActivate 将始终在 RouterStateSnapshot url 属性中保存“主”路由。
我已经看到了以下类似的请求... Angular 2 RouterStateSnapshot 没有返回正确的 url
我已经尝试过为每条路线指定不同的警卫的建议(出于绝望),但这不起作用。这肯定不是答案吗?我应该能够在路由之间共享一个身份验证守卫吗?
我正在使用 Angular 4。
angular - 多个Guards调用异步函数
我有两个警卫,Guard1 和 Guard2。Guard1 返回一个 Observable,Guard2 返回布尔值。
canActivate:[Guard1,Guard2]
假设Guard2会返回false,Guard1的请求会自动取消吗?还是无论如何都会执行呼叫?
angular - 带有 Firebase 身份验证的 Angular 2 AuthGuard 每次都重定向到登录页面
我尝试使用 firebase-auth 为 Angular 2 应用程序构建 AuthGuard,但存在一个问题。
应用程序加载后如果我因异步操作而登录AuthGuard
返回。
最终效果是页面加载时返回 firstime和 then ,因此每次重定向到 signIn 页面而不是根页面。
我认为我只使用 *ngIf 来显示,如果用户没有登录,但这不是解决方案,因为每次 SignInComponent 都会在短时间内可见。
如何解决此问题不立即重定向到登录页面?
谢谢您的回答。false
AuthGuard
false
true
SignInComponent
身份验证服务
授权信息
AuthGuard
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')
angular2-routing - 如何在路由发生之前加载 Appcomponent 类
我已经根据用户角色设置了路由并显示页面。为此,我在路线上使用警卫。我正在从 Appcomponent 类的服务中提取 userRole,并在主服务文件中使用 set 和 get 方法。现在的问题是,在我获得角色之前,会发生路由并导航到错误的 url,因为那时它还没有角色。从下一个电话开始很艰难,它可以正常工作。让我分享代码:- 1.这是警卫类:-
这是我从服务中提取 userRole 的 AppComponent:-
/li>这是我定义了 set 和 get 方法的主要服务:-
setSavedUserRole(name: any) { console.log('main'+name); this._userRoles = 名称;}
/li>
angular - Auth Guard 应用于 angular2 中的延迟加载模块,但它仍然在重定向,尽管被拒绝 canLoad 不起作用
假设 Return false 将在 http 调用上的身份验证中返回,但现在我从 CanLoadChildren() 方法返回 false 以测试 canLoad 但是尽管调用 canLoad 并返回 false canLoad 仍然加载模块并重定向到该模块。任何人都可以帮助? 谢谢
身份验证服务
验证保护文件
app.router.ts