import { Injectable } from '@angular/core'; import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree, Router, } from '@angular/router'; import { Observable } from 'rxjs'; import { AuthService } from '../services/auth.service'; import { map } from 'rxjs/operators'; @Injectable({ providedIn: 'root', }) export class AuthGuard implements CanActivate { constructor(private router: Router, private authService: AuthService) {} canActivate( next: ActivatedRouteSnapshot, state: RouterStateSnapshot ): | Observable | Promise | boolean | UrlTree { return this.authService.user$.pipe( map((user) => { if (user) { return true; } else { this.router.navigate(['login'], { queryParams: { returnUrl: state.url }, }); return false; } }) ); } }