Angular- Route Guard 在导航之前总是重定向到主页

Angular- Route Guard always redirects to home page before navigation

我正在尝试在我的网站上实施路由保护。它检查令牌,然后检查 returns true 或 false。如果它 returns false,它应该重定向。但是,当它应该导航时,它会先转到“/”路线,然后再转到所需的路线。

例如

当前行为

检查令牌。

令牌returns false。

重定向到“/”

然后导航到“/me/courses”

预期行为

检查令牌。

令牌returns false

导航到“/me/courses”

这是我的路线守卫

  canActivate(): Observable<boolean> | Promise<boolean> | boolean {
    var API_PATH = "auth/user/"
    var isAuthenticated = this.authService.isLoggedIn()

    if(!isAuthenticated) {
      return true
    }

    this.router.navigateByUrl("/me/courses")
    return false
  }

这是我检查令牌的代码

  loggedIn(autoFetchUserDetails = false) {
        if (autoFetchUserDetails) {
        this.fetchUserDetails();
    }
}

  isLoggedIn() {
      const token = this.globalService.getAuthToken();
      if (token) {
          if (!this.isAuth) {
            this.loggedIn(true);
          }
          return true;
      } else {
          if (this.isAuth) {
            this.logOut();
          }
          return false;
      }
    }

  fetchUserDetails() {
      const API_PATH = 'auth/user/';
      const SELF = this;
      this.api.getUrl(API_PATH).subscribe(
        data => {
          this.isAuth = true;
          this.user = data;
        },
        err => {
          this.globalService.deleteCookie(this.globalService.authStorageKey);
          this.logOut()
        }
      );
  }

你的问题是你 return 是假的。这告诉系统完全阻止导航。

如果你想让它转到不同的 URL,例如“/me/courses”,那么你需要 return 来自 Route Guard 的 UrlTree 对象,而不是 false .

  canActivate(): boolean | UrlTree {
    var API_PATH = "auth/user/"
    var isAuthenticated = this.authService.isLoggedIn()

    if(!isAuthenticated) {
      return true
    }

    const tree: UrlTree = this.router.parseUrl("/me/courses");
    return tree;
  }