Protección de rutas con Auth Guard en Angular

Clase 19 de 21Curso de Firebase con Angular 20

Resumen

La vulnerabilidad de la URL del chat queda cerrada al activar un flujo de autorización con Auth Guard y canActivate, vinculado a Firebase. Con un ajuste preciso en App Routes, solo usuarios autenticados acceden; los no autorizados son redirigidos a auth de forma inmediata. Así, el chat deja de estar expuesto y se prepara el terreno para hostear en la nube con confianza.

¿Cómo asegurar la URL del chat con Auth Guard?

El guard se implementa en la carpeta Source/App/Guards y utiliza canActivate para permitir o bloquear el acceso al chat según la autenticación en Firebase. La lógica devuelve un Observable de tipo boolean que, además, registra mensajes con console.log y navega a la ruta auth si no hay sesión activa.

  • Ubicar el guard en Source/App/Guards.
  • Usar canActivate que retorna un Observable.
  • Verificar sesión con un servicio ligado a Firebase.
  • Registrar eventos con console.log.
  • Navegar a auth y devolver false si no hay autenticación.

¿Qué lógica implementa el guard?

  • Si está autenticado: usuario permitido y retorna true.
  • Si no está autenticado: delegado, navega a auth y retorna false.
// guards/guard.ts
@Injectable({ providedIn: 'root' })
export class AuthGuard implements CanActivate {
  constructor(private auth: AuthService, private router: Router) {}

  canActivate(): Observable<boolean> {
    return this.auth.isAuthenticated$.pipe(
      map(isAuth => {
        if (isAuth) {
          console.log('usuario permitido');
          return true;
        }
        console.log('delegado');
        this.router.navigate(['auth']);
        return false;
      })
    );
  }
}

¿Qué cambios hacer en App Routes para proteger chat?

En App Routes se definen las rutas base y la protección del chat. El camino vacío redirige a auth; existe una ruta auth y una chat; cualquier ruta desconocida también redirige a auth. El único segmento protegido es chat, al que se le agrega canActivate con el guard implementado.

  • Rutas: vacío → auth.
  • Rutas: auth y chat definidas.
  • Rutas: wildcard redirige a auth.
  • Protección: chat con canActivate y el guard propio.
  • Importar el guard correcto desde guards/guard, evitando otros.

¿Cómo se anota canActivate en la ruta chat?

  • Añadir canActivate con el arreglo que incluye el guard.
  • Confirmar que el import corresponde a guards/guard.
// app.routes.ts
export const routes: Routes = [
  { path: '', redirectTo: 'auth', pathMatch: 'full' },
  { path: 'auth', /* ... */ },
  { path: 'chat', /* ... */, canActivate: [AuthGuard] },
  { path: '**', redirectTo: 'auth' }
];

¿Cómo validarlo en localhost y qué sigue en la nube?

La verificación es directa en localhost: cerrar sesión, intentar entrar al chat por URL y observar la redirección automática a auth. Con la protección activa, el acceso al chat queda restringido a usuarios autenticados y el siguiente paso es hostear la aplicación en la nube con la seguridad ya aplicada.

  • Abrir en localhost y cerrar sesión.
  • Intentar ingresar al chat por URL directa.
  • Confirmar la redirección a auth.
  • Continuar con el despliegue en la nube.

¿Te quedó alguna duda sobre la integración del Auth Guard o la configuración de App Routes? Deja tu pregunta y comparte cómo te fue con Copilot al sugerir canActivate.