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

angular - 多次调用 angular2 路由保护

我的一条私人路线上有一个路线守卫,当守卫返回 false 时,它​​不再被调用。以下示例简化了如何重现这种情况。

当用户使用链接导航时:

守卫被调用,我called在控制台中看到消息并且导航被取消(我返回false守卫):

但是,当用户再次单击该链接时,什么也没有发生。

为什么我需要这样的行为?我需要重复调​​用 guard 的原因是因为我必须显示 modal Do you want to login? YES/NO。当用户点击no我想留在页面上。但是当他后来决定再次导航时,我想让他再次登录。

有什么方法可以停止 angular2 缓存保护结果?

0 投票
1 回答
960 浏览

angular - Angular 2如何使auth guard与observable一起工作

我正在尝试对我的一条路线实施身份验证保护,但我无法让它工作,因为我不确定如何使用 observable 来做到这一点。

ngrx/store用来存储我的令牌,然后在我使用 获取它的守卫中this.store.select('auth'),它获取一个看起来像这样的对象(如果您已登录):

守卫看起来像这样:

现在,问题似乎是守卫返回一个可观察的而不是布尔值。即使您进入elsewhich 返回,这也会导致路线不呈现true

我怎样才能使守卫返回布尔值而不是可观察值?

0 投票
2 回答
454 浏览

angular - 如何在angular2中实现Resolve接口

我知道要实现解析保护,我们会做这样的事情

下面是我使用以上防护的路线

所以实际上我们必须替换什么来代替somethingInsideHere. 这取决于我是否根据Resolve<true>or更改它Resolve<false>。在这种情况下如何解决路由。无论我们在这种情况下指定什么,路由是否总是解决。

0 投票
2 回答
16379 浏览

angular - angular2: CanDeactivate 防护

我创建了一个 CanDeactivate 守卫,它返回一个可观察对象,并将其应用于加载到内部嵌套路由器插座中的组件。每当尝试导航到另一个 url 时是否应该调用这个守卫?我问这个是因为这在我的情况下没有发生。

在我的例子中,守卫只会被调用第一个“不同”的 URL。让我试着用一个例子来解释它。假设我总是返回 false 并且我试图从同一个组件导航到不同的 url:

这是预期的行为吗?

编辑好吧,似乎是这样。刚刚构建了一个包含 3 个组件的小示例,并且只会在用户第一次尝试导航到特定 url 时调用警卫......这真的很奇怪......

无论如何,这是我正在使用的代码:

//app.component.html <h1> <a routerLink="/main">Main</a> <a routerLink="/other">Other</a> <a routerLink="/other3">Other3</a> </h1>

一切都是通过 angular-cli 生成的(例如:ng component XXX)。是的,CanDeactivate 守卫将始终返回 false,因此您将无法卸载主要组件。所以,当我第一次点击其他时,守卫被召唤了。如果再次单击其他,则不会调用任何守卫。但是,如果我点击 other3,那么守卫就会被召唤。在我点击其他链接(例如:其他)之前,点击 other3 不会真正做任何事情......

这是预期的行为吗?我必须说,我希望每次我点击另一个链接时我的后卫都会受到打击......

谢谢。

路易斯

0 投票
3 回答
22211 浏览

unit-testing - 如何使用 Jasmine 对 angular2 的 canActivate 保护方法进行单元测试?

很抱歉问这种类型的问题。但是我找不到任何关于编写 canActivate 保护文件测试的博客或 youtube 教程。官方文档中也没有提到任何内容。

任何帮助都感激不尽。

0 投票
2 回答
9323 浏览

angular - Angular2:Global Guard(用户必须始终登录)

我正在构建一个应用程序,未经身份验证的用户根本无法访问。

我写了一个LoggedInGuard,但现在我必须添加canActivate: [LoggedInGuard]到我的路由器配置中的每个LoginComponent路由(除了)。

有没有更好的方法让这个工作?


我的文件/模块布局如下所示:


也许可以创建两个单独的路由空间(一个用于登录,一个用于应用程序的其余部分)并将保护仅应用于应用程序部分的其余部分?


我希望有一个简单的解决方案。

提前致谢!

0 投票
1 回答
2347 浏览

angular - 如何制作 Angular2 服务单例?

我正在尝试在我的应用程序中实现身份验证保护。IE; 只有经过身份验证的用户才能访问我的应用程序的某些路由。我正在遵循这里给出的 tut 。

用户登录后,我将 AuthService 中的布尔值更改为 true 以指示用户已登录。这需要在应用程序的整个生命周期中保留。

下面给出源代码:

auth-guard.service.ts

auth.service.ts

登录组件.ts

控制台输出

编辑:app.module.ts

我在这里做错了什么?任何帮助,将不胜感激。

0 投票
1 回答
265 浏览

angular - Angular CLI 中的错误保护路由

操作系统:linux x64 Ubuntu 16.04

角度版本

  • 角-cli:1.0.0-beta.24
  • 节点:7.2.0
  • npm:3.10.9

我使用 Angular CLI 创建了一个项目,但问题是当我更新页面时,当前路由已损坏,当我在路由路径中使用 CanActivate 时会发生这种情况,我无法使用它并且它可以工作,但我有来保护路线。

这是我的代码app.routing.ts

0 投票
2 回答
1214 浏览

angular - Angular 2 路由守卫不等待设置值

我有这个路由守卫,它应该检查用户的角色以及roleAccess路由定义中定义的属性。

我面临的问题是.map不管 是否都执行,只有当它是错误的accounts.isSelfPending(它从 开始)才允许运行。null@ngrx/store.map

我怎样才能做到这一点?

编辑:我意识到我的问题可能有点含糊,我需要等待来自/self组件层次结构更高层的请求中的用户信息,并存储在商店中。

现在的问题是,/self尽管在 my 中触发了请求,但该请求甚至没有被触发,而 myDashboardComponent又将其AdsComponent作为路由中的子节点之一。(这是我目前试图用这个守卫锁定的路线)。

为什么它甚至不触发/self请求?我认为这是这个问题的一部分。

0 投票
1 回答
3464 浏览

angular - angular2 refresh token via service

In my project the backend exposed refresh token api. When you log in you get valid token and refresh token. When the token expires you need to make a refresh call, authorized with the old expired token and parameter refresh token. The response returns new valid token and new refresh token. At the moment i am trying to implement it inside my authorization guard. This is the code:

}

But the problem is canActivate invokes, the call starts, refreshes token but i get 403 unauthorized from other calls that are on the activated page before the success response from the refresh. Also i cant figure out how to refresh token when i am standing on a page with save button, the token expires, i press save and update call is made, but with the expired token. Please suggest approaches :s