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

angular - 使用 CanActivate 防护时出现“无提供程序错误”

这是守门员:

这是路由器:

当页面加载时,我得到:

我见过的任何教程都没有提到如何将 MyGuard 作为提供者注入。我该怎么做呢?

0 投票
2 回答
845 浏览

angular - 将错误注入服务注入警卫

我正在制作这样的警卫:

服务在这里:

当我加载页面时,我收到此错误:

如果我在 MyGuard 的构造函数中删除声明服务的行

我能够加载页面而没有任何错误。我究竟做错了什么?

0 投票
1 回答
441 浏览

angular - 在引导后路由之前更新 Angular2 服务布尔值

我将 Angular2 与 ASP.NET Core MVC 一起使用,并且管理手动 URL 导航工作正常,服务器正在使用 Angular2 成功加载我的主页视图。

在用户身份验证中,我正在设置一个像这样的会话变量:

我想要的是,在用户进入应用程序后,如果他想通过手动导航来加载特定路由,我希望我的服务调用我的 ASP 控制器来检查用户是否已经通过身份验证,以便我的警卫允许路由。相反,守卫默认设置为假,我显然被重定向到我的登录页面。

这是我要调用的 ASP 控制器方法来更新我的 auth.service 中的 IsLoggedIn 值:

这样我的 AuthenticationGuard 可以调用 AuthenticationService 来更新管理已验证状态的布尔值:编辑:粘贴整个auth.guard.ts代码以获得更清晰的解释

使用以下代码更新我的 auth.service 中的布尔值:


当我尝试手动加载受保护的路由时,问题就出现了,在我的服务中的布尔值更新之前,我被重定向到登录页面。我不知道我可以设置什么样的解决方案来解决这个问题......

我试着打电话

  • 在我的守卫构造函数中
  • 在我的服务构造函数中

但它仍然没有在正确的时刻这样做。我最好的猜测是在我加载我的第一个 AppModule 时管理它,但即使这可能是正确的时刻,我也不能保证我的布尔值会在 Angular2 完成引导时更新,并且执行同步 Http 调用似乎是一个非常糟糕的解决方案,因为它会阻止浏览器......任何想法都会非常有帮助。

PS:我今天做了一个类似的帖子,但它是针对不同的问题,所以我将它链接到这里以避免混淆:Managing user authenticated state on manual URL navigation

0 投票
1 回答
2203 浏览

angular - 可以“canActivate”接收数据吗?

我的路由器中有这些行:

我想通过 MyGuard 的 canActivate 限制对 SearchComponent 的访问。

是否可以从 canActivate 获取此数据数组?

先感谢您!

0 投票
0 回答
1421 浏览

angular - Angular2 CanDeactivate 与异步可观察

我正在研究 Guards 并试图阻止使用 CanDeactivate 进行导航。我想用保存/取消显示一个简单的模式,保存 = 导航,好吧,取消 = 取消。

我有 CanDeactivate 工作,但它似乎没有在正确的时间解决

Guard.ts

组件.ts

在第一次“保存”时,一旦显示模态,什么都不会发生。在第二个“保存”上,导航会在我回答模态之前发生。我怎样才能让它在正确的时间解决?

0 投票
3 回答
31489 浏览

angular - Angular 2 获取当前路线

我的项目中有一个 AccessGuard 类,它的工作是确定用户是否可以访问该路由。我使用router.url来获取当前路线,但 url 在导航到新路线之前返回路线,就像我在用户路线中一样,我单击候选路线,因此 url 返回用户而不是我希望验证访问的候选者到路线这是我的路线文件:

这是我的门禁:

0 投票
3 回答
15713 浏览

angular - Angular 2 角色和权限

我在我的项目中使用了 angular2 和 laravel 5.3。在laravel中,当用户登录服务器时,将发送用户的权限以处理角度授权。所以我写了一个守卫来保护无法访问的用户的路由。这是我的警卫类代码:

现在路由是安全的,我想知道如何访问组件类中的用户权限。因为有时用户可以访问路由但看不到 dom 的特定部分。我该如何处理这种情况?

0 投票
1 回答
6159 浏览

angular - Angular 2根据路线在某些页面上隐藏导航

当用户查看某些页面时,我试图自动隐藏导航。例如,如果用户正在查看登录页面,则不应显示菜单。

到目前为止,我尝试过的是,我有一个 Navigator 服务,它将根据当前页面的 URL 路径更改“显示导航”标志。这是由 App Guard 访问的,到目前为止,其工作是将下一个 URL 传递给 Navigator 服务并更新“显示导航”标志。

就测试而言,我正在通过单击事件更新视图,以检查服务是否接收到正确的数据并进行相应更新。

我唯一的问题是我想不出一种方法来订阅/收听“一直”“显示导航”标志的变化。我的意思是我希望导航被隐藏并自动显示。

导航服务

应用卫士

应用组件

应用组件模板

如上所示,现在作为测试,我有一个“切换导航”按钮,以便我可以订阅该服务。老实说,我不知道这是否是最好的实现,也许我没有以正确的方式去做。我想问一下是否有一种方法可以让 App 组件始终知道“显示导航”标志的值。

更新 - 问题已解决

我已经按照这个问题正确地引导我找到答案。我更新了导航服务如下:

导航服务

ngOnInit然后我在 App 组件的生命周期钩子中订阅了该服务:

我仍然不能 100% 确定这是否是最好的方法,但到目前为止它已经解决了我的问题。

0 投票
2 回答
3284 浏览

angular - 在 Angular2 的 CanActivate 中注入服务

我正在尝试为我的路线创建 auth Guard 服务。在此服务中,我需要注入我用来返回当前登录用户的 UserAccountService。

这是我的后卫:

UserAccountService工作正常注入组件,它包含在我的app.module

其他服务,例如CookieServiceHttp等,注入就好了,但是UserAccountService有这个问题。

下面是服务的定义:

0 投票
2 回答
7302 浏览

angular - 对 Angular 2 应用程序中的所有路由使用基本防护

canActivate在 Angular2 中配置路由时,有没有办法设置“基础” ?这样所有的路由都被同一个base check覆盖,然后每条路由都可以进行更细粒度的检查。

我有一个AppModule这样的路由:

对于功能模块FeatureModule

我让AuthenticationGuardService检查用户是否可以使用data.

我可以做些什么来避免在我的所有功能路由模块中进行设置canActivatedata?我只想canActivate为此应用程序中的所有路由配置一个“基础”。