我有一个角度6应用程序。新用户需要先进行快速设置才能使用该应用程序。
我正在使用后端api来检查用户状态,并查看用户是否已完成初始设置。
我在AppComponent::ngOnInit
和LoginConponent::ngOnInit
中称这个api,如果用户访问/
或其未经授权,这可以正常工作,因为在外部登录后用户将被重定向到/login
。
但是,如果用户在登录后但在完成初始设置之前手动输入网址(如/profile
),则用户将被重定向到/profile
页面,并在后端api检查其状态并将其重定向到/quick-setup
页面。
有没有办法在应用程序启动时自动停止角度路由?所以我可以手动完成吗?
我不需要也不想在每次路线更改时检查这个,只是在app开始!
我可以以某种方式使用Resolve
吗?
我已经有AuthGuard
来检查身份验证状态但是这将在每次路线更改时检查,这不是我想要的
好的,这就是我做的工作。
首先在app.component
ngOnInit(): void {
//always go to login page to authenticate and then redirect to the requested url
this.authService.navigateToLogin();
}
navigateToLogin() {
if (!Util.checkUrl('/logout') && !Util.checkUrl('/signup'))
this.router.navigate(['/login'], { skipLocationChange: true });
}
在login.component
中,将location.pathname
存储在cookie中,以便我可以在登录后重定向到它
ngOnInit() {
if (!Util.checkUrl('/login') && !Util.checkUrl('/', true) && !Util.checkUrl('/#')) {
this.cookieService.set(COOKIE_LOGIN_REDIRECT, location.pathname, 3600, '/');
}
this.authService.verify();
}
this.authService.verify();
检查后端以查看用户是否正常,然后重定向到存储在cookie中的位置。
let redirect = this.cookieService.get(COOKIE_LOGIN_REDIRECT);
if (redirect) {
this.cookieService.delete(COOKIE_LOGIN_REDIRECT, '/');
redirect = redirect.replace(environment.baseHref, '');
return this.router.navigateByUrl(redirect);
}