1

ルートガードを使用して、ルートにアクセスする前にログインしたユーザーかどうかを確認しようとしています。そのため、ユーザーがログインしている場合はreplaySubjectにtrueが含まれています。ユーザーがログインしているかどうかを確認するためにメソッドを呼び出すと、値はtrueになりますが、canActivateメソッド内で同じメソッドを呼び出すと、値は空になるため、そうします何も返しません。

メソッドcanActivate:

//inside AuthService
canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean> {
  return this.isLoggedIn();
}

メソッドisLoggedIn:

//inside AuthService
isLoggedIn() {
return this.loggedIn
  .first()
  .do(user => {
    console.log(user);
  })

}

件名loggedIn:

//inside AuthService
loggedIn: Subject<boolean> = new ReplaySubject<boolean>(1);

リンク:

<a (click)="checkLogin()" [routerLink]="['/table']">some text</a>

checkLogin方法:

checkLogin() {
this.auth
  .isLoggedIn()
  .toPromise()
  .then(data => {
    // this returns true
    console.log("login status is", data);
  });
}

ルーティング モジュール:

const appRoutes: Routes = [
  { path: "home", component: HomeComponent },
  { path: "table", component: TableComponent, canActivate: [AuthService] },
  { path: "", redirectTo: "/home", pathMatch: "full" }
];

角度バージョン: 5.2.8、角度ルーター バージョン: 5.2.8

4

1 に答える 1