开始路由之前的Angular 6调用后端API

时间:2019-01-24 10:29:16

标签: angular routing angular-router

我有一个Angular 6应用程序。新用户需要快速设置才能使用该应用程序。

我正在使用后端api检查用户状态,并查看用户是否已完成初始设置。

我在AppComponent::ngOnInitLoginConponent::ngOnInit中都调用了这个api,如果用户访问/或未经授权,则可以正常使用,因为在外部登录后,用户将被重定向到{{1 }}。

但是,如果用户在登录后但在完成初始设置之前像/login那样手动输入url,则用户将被重定向到/profile页面,并在大约一秒钟的时间内看到该页面后端api正在检查其状态并最终重定向到/profile页。

有什么方法可以在应用启动时自动停止角度路由吗?所以我可以手动完成?

我不需要也不希望在每次更改路线时都检查一下,只是在应用程序启动时!

我可以为此使用Resolve吗?

我已经有/quick-setup来检查身份验证状态,但这将在每次路由更改时被检查,这不是我想要的

1 个答案:

答案 0 :(得分:0)

好的,这就是我所做的工作。

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);
    }