问题标签 [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 - 使用 CanActivate 防护时出现“无提供程序错误”
这是守门员:
这是路由器:
当页面加载时,我得到:
我见过的任何教程都没有提到如何将 MyGuard 作为提供者注入。我该怎么做呢?
angular - 将错误注入服务注入警卫
我正在制作这样的警卫:
服务在这里:
当我加载页面时,我收到此错误:
如果我在 MyGuard 的构造函数中删除声明服务的行
我能够加载页面而没有任何错误。我究竟做错了什么?
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
angular - 可以“canActivate”接收数据吗?
我的路由器中有这些行:
我想通过 MyGuard 的 canActivate 限制对 SearchComponent 的访问。
是否可以从 canActivate 获取此数据数组?
先感谢您!
angular - Angular2 CanDeactivate 与异步可观察
我正在研究 Guards 并试图阻止使用 CanDeactivate 进行导航。我想用保存/取消显示一个简单的模式,保存 = 导航,好吧,取消 = 取消。
我有 CanDeactivate 工作,但它似乎没有在正确的时间解决
Guard.ts
组件.ts
在第一次“保存”时,一旦显示模态,什么都不会发生。在第二个“保存”上,导航会在我回答模态之前发生。我怎样才能让它在正确的时间解决?
angular - Angular 2 获取当前路线
我的项目中有一个 AccessGuard 类,它的工作是确定用户是否可以访问该路由。我使用router.url
来获取当前路线,但 url 在导航到新路线之前返回路线,就像我在用户路线中一样,我单击候选路线,因此 url 返回用户而不是我希望验证访问的候选者到路线这是我的路线文件:
这是我的门禁:
angular - Angular 2 角色和权限
我在我的项目中使用了 angular2 和 laravel 5.3。在laravel中,当用户登录服务器时,将发送用户的权限以处理角度授权。所以我写了一个守卫来保护无法访问的用户的路由。这是我的警卫类代码:
现在路由是安全的,我想知道如何访问组件类中的用户权限。因为有时用户可以访问路由但看不到 dom 的特定部分。我该如何处理这种情况?
angular - Angular 2根据路线在某些页面上隐藏导航
当用户查看某些页面时,我试图自动隐藏导航。例如,如果用户正在查看登录页面,则不应显示菜单。
到目前为止,我尝试过的是,我有一个 Navigator 服务,它将根据当前页面的 URL 路径更改“显示导航”标志。这是由 App Guard 访问的,到目前为止,其工作是将下一个 URL 传递给 Navigator 服务并更新“显示导航”标志。
就测试而言,我正在通过单击事件更新视图,以检查服务是否接收到正确的数据并进行相应更新。
我唯一的问题是我想不出一种方法来订阅/收听“一直”“显示导航”标志的变化。我的意思是我希望导航被隐藏并自动显示。
导航服务
应用卫士
应用组件
应用组件模板
如上所示,现在作为测试,我有一个“切换导航”按钮,以便我可以订阅该服务。老实说,我不知道这是否是最好的实现,也许我没有以正确的方式去做。我想问一下是否有一种方法可以让 App 组件始终知道“显示导航”标志的值。
更新 - 问题已解决
我已经按照这个问题正确地引导我找到答案。我更新了导航服务如下:
导航服务
ngOnInit
然后我在 App 组件的生命周期钩子中订阅了该服务:
我仍然不能 100% 确定这是否是最好的方法,但到目前为止它已经解决了我的问题。
angular - 在 Angular2 的 CanActivate 中注入服务
我正在尝试为我的路线创建 auth Guard 服务。在此服务中,我需要注入我用来返回当前登录用户的 UserAccountService。
这是我的后卫:
UserAccountService
工作正常注入组件,它包含在我的app.module
:
其他服务,例如CookieService
,Http
等,注入就好了,但是UserAccountService
有这个问题。
下面是服务的定义:
angular - 对 Angular 2 应用程序中的所有路由使用基本防护
canActivate
在 Angular2 中配置路由时,有没有办法设置“基础” ?这样所有的路由都被同一个base check覆盖,然后每条路由都可以进行更细粒度的检查。
我有一个AppModule
这样的路由:
对于功能模块FeatureModule
:
我让AuthenticationGuardService
检查用户是否可以使用data
.
我可以做些什么来避免在我的所有功能路由模块中进行设置canActivate
吗data
?我只想canActivate
为此应用程序中的所有路由配置一个“基础”。