es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo proteger la capa de la aplicación con el modelo de Angular App Shell.

Tengo un proyecto grande que utiliza el Modelo de Shell de Aplicación de Angular. También estoy utilizando Angular MSAL.js (v2) (aunque esta pregunta puede no estar relacionada específicamente con MSAL).

Mis rutas de proyecto de la aplicación están protegidas mediante el uso de MsalGuard en mi caso. Sin embargo, quiero invocar las verificaciones del guardia antes de construir el shell de la aplicación, en lugar de los proyectos que se inyectan en el shell de la aplicación. Básicamente, quiero que mi guardia se verifique antes de cargar cualquier cosa, incluido el shell de la aplicación.

Dado que toda mi enrutamiento está configurado dentro de cada proyecto, el guardia solo se activa después de construir el shell de la aplicación, lo cual inicia muchas más partes de la aplicación antes de que pueda redirigir a la página de inicio de sesión (si se activa el guardia).

Lo que he intentado hacer es configurar un guardia de ruta genérico en el shell de la aplicación en un intento de activar el guardia antes de cargar el shell.

app-shell-routing.module.ts

// imports...
const routes: Routes = [{ path: '', component: AppShellComponent, canLoad: [MsalGuard] }];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],
})
export class AppShellRoutingModule {}

app-shell.module.ts

// imports y otras configuraciones...
...
imports: [
  ...
  AppShellRoutingModule
]
...

Sin embargo, esto no protege el shell de la aplicación para que no se construya y aún así se construye antes de la redirección de autenticación (desde el guardia que devuelve false). El resultado es el mismo con canLoad y canActivate.

¿Es posible proteger el shell de la aplicación para que una condición deba ser verdadera antes de cargar todo el shell en lugar de solo proteger los proyectos cargados en el shell?

El tiempo total de carga puede ser exactamente el mismo (una carga antes y después del guardia de ruta, y la otra carga después de esto), pero siento que esto sería una mejor experiencia de usuario para ir directamente a la autenticación si el guardia devuelve false.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Según la información proporcionada, no parece posible proteger la app-shell en sí misma usando un guardia de ruta. Los guardias de ruta solo protegen las rutas a las que están asignados, y en este caso, la app-shell es un módulo separado que se carga de manera independiente a los módulos del proyecto.

    Una posible solución podría ser agregar una verificación condicional en AppComponent para redirigir a la página de inicio de sesión si el usuario no está autenticado, en lugar de depender únicamente del guardia de ruta. De esta manera, la verificación se realizaría antes de que se construya la app-shell, asegurando que el usuario sea redirigido a la página de inicio de sesión de inmediato si no está autenticado.

    Otra opción podría ser dividir la app-shell en varias partes y cargarlas de manera condicional según el estado de autenticación. Por ejemplo, podrías tener un módulo separado de app-shell para usuarios autenticados y no autenticados, y cargar el módulo apropiado según el estado de autenticación del usuario. Esto requeriría una configuración y configuración adicional, pero te daría un mayor control sobre el proceso de carga de la app-shell.

Comments are closed.