middleware method

  1. @override
Middleware middleware()
override

Create guard middleware

Implementation

@override
Middleware middleware() {
  return (Handler handler) {
    return (Request request) async {
      // Check if route is excepted
      if (_isExcepted(request.url.path)) {
        return await handler(request);
      }

      // Extract and verify JWT token
      final token = _extractToken(request);

      if (token == null) {
        return Response(401,
            body: '{"error": "Unauthorized", "message": "No token provided"}',
            headers: {'Content-Type': 'application/json'});
      }

      final jwt = JWT.verify(token, secret: jwtSecret);

      if (jwt == null || _isTokenExpired(jwt)) {
        return Response(401,
            body:
                '{"error": "Unauthorized", "message": "Invalid or expired token"}',
            headers: {'Content-Type': 'application/json'});
      }

      // Add user data to request context
      final authContext = {
        'user': jwt.payload,
        'auth_token': token,
        'is_authenticated': true,
        'guard': 'jwt',
      };

      final updatedRequest = request.change(context: authContext);
      return await handler(updatedRequest);
    };
  };
}