簡體   English   中英

角度路線護衛返回可觀察到的錯誤值

[英]angular route guard returns wrong value for observable

我正在嘗試使用路由防護器來檢查我是否在訪問路由之前登錄了用戶。 為此,如果用戶登錄,我有一個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

謝謝皮埃爾為我指出正確的方向

事實證明,我在我的應用程序組件和應用程序模塊中都提供了我的身份驗證服務,這又導致我在應用程序中有兩次實例化我的身份驗證服務,一次是我的組件,一次是我的模塊。

我剛剛從應用程序組件中刪除了該服務,它可以正常工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM