Я пытаюсь перенаправить пользователя на экран приложения или входа в систему, когда дешифрует зарегистрированного пользователя.
Я использую Angular "~ 8.1.0-next.2".В первый раз пытаюсь использовать Guards в приложении.
// IsLoggedGuard
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
console.log(state.url);
return this.checkStore().pipe(
switchMap(() => of(true)),
catchError(() => of(false))
)
}
checkStore(): Observable<boolean> {
return this.store.select(selectAuthIsLogged).pipe(
tap( isLogged => {
if ( !isLogged )
this.store.dispatch(AuthActions.Load_Current_User())
}),
filter(isLogged => isLogged),
take(1)
)
}
// LoginGuard
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return this.store.select(selectAuthIsLogged)
.pipe(
tap( logged => {
if ( logged )
this.router.navigate(['']);
return of(!logged);
})
)
}
// AuthGuard
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return this.store.select(selectAuthIsLogged)
.pipe(
tap( logged => {
if ( !logged )
this.router.navigate(['login']);
return of(logged);
})
)
}
У меня есть два маршрута ['login', ''], я вызываю двух охранников для каждого: 'login':IsLoggedGuard и LoginGuard '': IsLoggedGuard и AuthGuard
В AuthGuard, когда logged - true, вызывается приложение.Но я никогда не мог получить доступ к логину с определенным CanActivate.Если я удаляю CanActivate, можно войти в экран входа в систему.