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.

Middleware de autenticación de navegación de Flutter.

He construido una aplicación que utiliza una autenticación local, pero si un usuario no usa el software durante mucho tiempo (ya sea en la aplicación web o móvil), quiero poder detectarlo y llevarlo a la página de inicio de sesión.

Intenté usar RouteObserver y escribí un observador personalizado, pero no es bueno para la navegación, solo para el registro y seguimiento.

Referencia: medium

Sé que es posible agregar condiciones antes de todos mis Navigator.push(), pero estoy buscando una manera de agregar un middleware a todas mis rutas.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para manejar este escenario, se puede utilizar middleware para interceptar todos los eventos de navegación en su aplicación. El middleware es un fragmento de código que se ejecuta antes y después de cada operación de navegación, permitiéndole modificar o cancelar la solicitud de navegación.

    Aquí están los pasos que puede seguir para implementar middleware en su aplicación:

    1. Cree una función de middleware que compruebe si el usuario ha estado inactivo durante cierto tiempo.
    Function createAuthMiddleware({int inactiveTimeout = 30}) {
      DateTime lastActiveTime = DateTime.now();
    
      return (BuildContext context, RouteSettings settings, FutureOr<void> Function() next) async {
        final now = DateTime.now();
    
        // calcule la diferencia de tiempo entre el último tiempo activo y el tiempo actual
        final difference = now.difference(lastActiveTime);
    
        // si el usuario ha estado inactivo por más tiempo que el tiempo de espera preestablecido, redirigir a la pantalla de inicio de sesión
        if (difference.inMinutes > inactiveTimeout) {
          Navigator.of(context).pushReplacementNamed('/login');
          return;
        }
    
        // actualizar el último tiempo activo y continuar con el flujo de navegación normal
        lastActiveTime = now;
        await next();
      };
    }
    
    1. Envuelva su widget MaterialApp o CupertinoApp con un widget de aplicación personalizado que extienda el widget de aplicación base y aplique el middleware a todas las rutas de la aplicación:
    class MyApp extends StatelessWidget {
      final routerDelegate = MyRouterDelegate();
      final authMiddleware = createAuthMiddleware();
    
      @override
      Widget build(BuildContext context) {
        return AuthMiddlewareWrapper(
          child: MaterialApp.router(
            routerDelegate: routerDelegate,
            routeInformationParser: MyRouteInformationParser(),
            builder: (_, router) => router,
            routeInformationProvider: PlatformRouteInformationProvider(
              initialRouteInformation: RouteInformation(location: '/'),
            ),
            routeMiddleware: [authMiddleware],
          ),
        );
      }
    }
    

    En este ejemplo, estamos utilizando el widget AuthMiddlewareWrapper para gestionar el estado de autenticación de la aplicación. La propiedad routeMiddleware nos permite adjuntar nuestro middleware de autenticación a todas las rutas de la aplicación.

    Con esta implementación, cada vez que el usuario navega a una nueva pantalla, la función de middleware se ejecutará. Si el usuario ha estado inactivo durante más de el tiempo de espera especificado, el middleware lo redirigirá a la pantalla de inicio de sesión.

    Tenga en cuenta que esta implementación asume que ya ha configurado la autenticación local en su aplicación. Si aún no ha implementado la autenticación, deberá crear una pantalla de inicio de sesión y alguna lógica de autenticación para manejar las solicitudes de inicio de sesión.

Comments are closed.