gpt4 book ai didi

javascript - Angular 2 : how to "reload" page with router (recheck canActivate)?

转载 作者:数据小太阳 更新时间:2023-10-29 04:17:48 31 4
gpt4 key购买 nike

我的路由器带有 canActivate: [ AuthGuard ] 并在 AuthGuard 中进行验证

如何在相同的路由器 url 中强制检查 canActivate

例如:当前路由是/admin 并且我有类似session expired 的事件。我在 AuthGuard 中进行了 session 检查,但此检查仅在我执行 .navigate(...) 时激活。如何在同一位置强制运行 canActivate

我已经尝试过:this.router.navigate([ this.router.url ]); 但是 Angular 检查相同的位置并且什么也不做。

附注当我收到 session expired event 时,我可以定位到“登录页面”或其他页面,但是我在 AuthGuard 中有所有重定向,我不想重复相同的重定向所有其他事件,我需要像 location.reload() 但在 Angular2 路由中。

主要问题听起来像:如何在当前位置强制重新运行canActivate 守卫?

最佳答案

我的临时解决方案:

auth.service.ts

import { Injectable, Injector } from '@angular/core';
import { ActivatedRoute, Router, RouterStateSnapshot } from '@angular/router';

@Injectable()
export class AuthService {

constructor(private route: ActivatedRoute,
private router: Router,
private injector: Injector) {
this.forceRunAuthGuard();
}

// Dirty hack for angular2 routing recheck
private forceRunAuthGuard() {
if (this.route.root.children.length) {
// gets current route
const curr_route = this.route.root.children[ '0' ];
// gets first guard class
const AuthGuard = curr_route.snapshot.routeConfig.canActivate[ '0' ];
// injects guard
const authGuard = this.injector.get(AuthGuard);
// makes custom RouterStateSnapshot object
const routerStateSnapshot: RouterStateSnapshot = Object.assign({}, curr_route.snapshot, { url: this.router.url });
// runs canActivate
authGuard.canActivate(curr_route.snapshot, routerStateSnapshot);
}
}

}

app.routes.ts

  { path: 'faq', canActivate: [ AuthGuard ], component: FaqComponent },
{ path: 'about', canActivate: [ AuthGuard ], component: AboutUsComponent },
{ path: 'upgrade', canActivate: [ AuthGuard ], component: UpgradeComponent },

此代码再次运行 AuthGuard

关于javascript - Angular 2 : how to "reload" page with router (recheck canActivate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45680250/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com