angular - Ngrx 两个守卫在注销时第二个不触发路由
问题描述
我有这些路线:
{
path: 'admin',
canLoad: [AuthGuard, AccountGuard],
loadChildren: () =>
import('./features/admin/admin.module').then(m => m.AdminModule),
data: { preload: false }
},
{
path: 'auth',
loadChildren: () =>
import('./features/auth/auth.module').then(m => m.AuthModule),
data: { preload: false }
}
在登录时,两者都被触发,但是当在管理区域中我注销删除身份验证和帐户状态时,如果我再次登录而不刷新仅触发第一个,则重定向到身份验证路由。我试过使用
onSameUrlNavigation: 'reload'
runGuardsAndResolvers: 'always'
但我仍然有同样的行为。
有任何想法吗?
注意 ,我也尝试在 AccountGuard 中放置一个简单的 console.log,例如
canLoad(): Observable<boolean> {console.log('Account)}
但在第二次登录时,我在开发工具中看不到任何消息
解决方案
根据角度网站的定义 - “CanLoad
是一个类可以实现的接口,作为决定是否可以加载子级的守卫”。
当 route/child 被加载时,CanLoad
守卫返回 true,然后,一旦加载,守卫将不再被调用。每次导航到路线时,CanActivate
都需要进行此类检查。我建议实施CanActivate
并分配需要在登录时运行的警卫。
另外这里是 github 的链接,该功能已由 Angular 团队实现 - https://github.com/angular/angular/commit/8785b2bf6db8c3ecc4bd5edcf667d5f2f53f5271
推荐阅读
- c# - ASP.Net Core Api 中间件通过调用控制器操作来结束请求
- javascript - 使用 multipart/form-data 上传多个文件并在 Vue.js 中获取
- r - knitr `code` 选项可以找到本地对象吗?
- python - 根据列内的值比较两个数据框
- machine-learning - 使用时间戳训练分类模型
- javascript - 如何避免内联函数绑定到旧状态值
- firebase - Firestore 分页根本不适用于 DocumentSnapshot
- react-native - 如何在 react-native 中调用 FFI 函数
- regex - 正则表达式替换谷歌表替换多个数字
- heroku - Heroku 模型部署成功,但未找到 nltk.txt