import { CodeTabs, CodeTab } from "docs-ui" export const metadata = { title: `User Module`, } # {metadata.title} The User Module is the `@medusajs/user` NPM package that provides user-related features in your Medusa and Node.js applications. --- ## Features ### User Management Manage and store your users through Create, Read, Update, and Delete (CRUD) operations: ```ts const user = await userModuleService.create({ email: "user@example.com", first_name: "John", last_name: "Smith", }) ``` ### Invite Users Invite users to join your store and manage those invites, with expiry and revalidation features. ```ts const invite = await userModuleService.createInvites({ email: "user2@example.com", }) // refresh token later await userModuleService.refreshInviteTokens([invite.id]) ``` --- ## Configure User Module After installing the `@medusajs/user` package in your Medusa application, add it to the `modules` object in `medusa-config.js`: ```js title="medusa-config.js" const modules = { // ... user: { resolve: "@medusajs/user", options: { jwt_secret: process.env.JWT_SECRET, }, }, } ``` ### Module Options Refer to [this documentation](./module-options/page.mdx) for details on the module's options. --- ## How to Use User Module's Service You can use the User Module's main service by resolving from the Medusa container the resource `ModuleRegistrationName.USER` imported from `@medusajs/modules-sdk`. For example: ```ts title="src/api/store/custom/route.ts" import { MedusaRequest, MedusaResponse } from "@medusajs/medusa" import { IUserModuleService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/modules-sdk" export async function GET( req: MedusaRequest, res: MedusaResponse ): Promise { const userModuleService: IUserModuleService = req.scope.resolve(ModuleRegistrationName.USER) res.json({ users: await userModuleService.list(), }) } ``` ```ts title="src/subscribers/custom-handler.ts" import { SubscriberArgs } from "@medusajs/medusa" import { IUserModuleService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/modules-sdk" export default async function subscriberHandler({ container, }: SubscriberArgs) { const userModuleService: IUserModuleService = container.resolve(ModuleRegistrationName.USER) const users = await userModuleService.list() } ``` ```ts title="src/workflows/hello-world/step1.ts" import { createStep } from "@medusajs/workflows-sdk" import { IUserModuleService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/modules-sdk" const step1 = createStep("step-1", async (_, context) => { const userModuleService: IUserModuleService = context.container.resolve( ModuleRegistrationName.USER ) const users = await userModuleService.list() }) ```