Proteger rutas con Guards en Angular

by | Jun 17, 2019 | Angular

Los guards en angular son interfaces que permiten proteger las rutas e indican al enrutador si se permitirá la navegación a una ruta o no.

En este caso utilizaremos el guard CanActivate, aunque existen otros cuatro tipos más y son los siguientes: CanActivateChild, CanDeactivate, CanLoad, Resolve.

import { Injectable } from '@angular/core';

import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';

import { Observable } from 'rxjs';

import { AuthenticationService } from '../services/authentication.service';

 

@Injectable({

  providedIn: 'root'

})

export class AuthGuard implements CanActivate {

 

  constructor (public _authService: AuthenticationService,

               public router: Router) {}

  canActivate(

    next: ActivatedRouteSnapshot,

    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

 

      if (!this._authService.isLoggedIn()) {

        this.router.navigate(['login']);

        return false;

      }

      return true;

  }

}

El método CanActivate devuelve un valor boolean que es el que indica si se debe permitir o no la navegación a una ruta. Si el usuario no está autenticado, será redireccionado a otro lugar, en este caso a una ruta llamada /login.

Aplicando el guard a la ruta que se quiere proteger:

{path: 'auth-home', component: AuthHomeComponent, canActivate: [AuthGuard]}

Si requieres más información acerca de los guards, puedes consultar la documentación oficial de angular.

Entradas relacionadas

Descubre en 5 minutos las áreas de tu empresa puedes mejorar