avatar

ShīnChvën ✨

Effective Accelerationism

Powered by Druid

Unlocking User Data in TypeScript FeathersJS V5 Custom Services

Fri Jan 05 2024

Facing the Feathery Challenge

While working with FeathersJS V5 and TypeScript, I have encountered a peculiar challenge: accessing the user object within custom services. While authentication mechanisms still generate the user object, it's no longer included in the default ServiceParams type definition. This poses a type-safety hurdle for TypeScript-based projects.

Unveiling the Solution

Fortunately, a straightforward solution exists to bridge this gap. Here's a step-by-step guide to access the user object effectively:

  1. Within your custom service class, a custom interface was created by the @feathersjs/cli that extends the base ServiceParams interface:

    export interface OrdersParams extends Params<OrdersQuery> {
      // add user property to params
      user: UserModel;
    }
    
  2. Now you will be able to access the user object within your service methods:

    export class OrdersService<ServiceParams extends OrdersParams = OrdersParams>
      implements ServiceInterface<Orders, OrdersData, ServiceParams, OrdersPatch> {
      constructor(public options: OrdersServiceOptions) {}
    
      async find(_params?: ServiceParams): Promise<any> {
        // Access user properties safely here
        const user = _params?.user;
        return [];
      }
    }
    

Key Considerations:

  • Ensure your authentication plugin correctly attaches the user object to the context.
  • Handle cases where the user object might be missing or invalid to ensure robust application behavior.
  • Adhere to type safety principles for maintainable and scalable code.

Benefits of This Approach:

  • Type Safety: Maintain type consistency and prevent potential errors.
  • Flexibility: Customize user object access within specific service methods.
  • Clarity: Improve code readability and understanding for future developers.

Conclusion

By following these steps, you can confidently access the user object within TypeScript FeathersJS V5 custom services, ensuring type safety and streamlining your development experience. Embrace this technique to unlock user-centric features in your FeathersJS applications!