Parameter Decorators
Parameter decorators provide a convenient way to inject user session information directly into your controller methods. InversifyJS HTTP Better Auth provides framework-specific decorators that extract and parse authentication data from incoming requests.
Available Decorators
- Express & Express 4
- Fastify
- Hono
@Controller('/api')
class UserController {
@ApplyMiddleware(betterAuthMiddlewareServiceIdentifier)
@Get('/profile')
public async getProfile(
@ExpressUserSession() session: UserSession<BetterAuthOptions>,
): Promise<UserSession<BetterAuthOptions>> {
return session;
}
}
@Controller('/api')
class UserController {
@ApplyMiddleware(betterAuthMiddlewareServiceIdentifier)
@Get('/profile')
public async getProfile(
@FastifyUserSession() session: UserSession<BetterAuthOptions>,
): Promise<UserSession<BetterAuthOptions>> {
return session;
}
}
@Controller('/api')
class UserController {
@ApplyMiddleware(betterAuthMiddlewareServiceIdentifier)
@Get('/profile')
public async getProfile(
@HonoUserSession() session: UserSession<BetterAuthOptions>,
): Promise<UserSession<BetterAuthOptions>> {
return session;
}
}
Required middleware
You must apply betterAuthMiddlewareServiceIdentifier middleware to any controller relying on session decorators or apply betterAuthMiddlewareServiceIdentifier as global middleware.
Return Types
All decorators return either:
UserSession<TOptions>- When a valid session is foundnull- When no valid session is found
Handling Authenticated Users
@Controller('/api')
class UserController {
@ApplyMiddleware(betterAuthMiddlewareServiceIdentifier)
@Get('/user-info')
public async getUserInfo(
@HonoUserSession() session: UserSession<BetterAuthOptions>,
): Promise<{ id: string; email: string; name: string }> {
return {
email: session.user.email,
id: session.user.id,
name: session.user.name,
};
}
}
Handling Optional Authentication
@Controller('/api')
class OptionalAuthController {
@ApplyMiddleware(betterAuthMiddlewareServiceIdentifier)
@Get('/optional-auth')
public async optionalAuth(
@HonoUserSession() session: UserSession<BetterAuthOptions> | null,
): Promise<{ authenticated: boolean; userId?: string }> {
if (session === null) {
return { authenticated: false };
}
return {
authenticated: true,
userId: session.user.id,
};
}
}
Error Handling
If the Better Auth middleware is not applied, the decorators will throw an error during request processing. Always ensure the middleware is properly configured:
@Controller('/api')
export class BadController {
@Get('/profile')
public async getProfile(
@HonoUserSession() session: UserSession<BetterAuthOptions>, // Error!
): Promise<UserSession<BetterAuthOptions>> {
return session;
}
}
// ✅ This works - middleware properly applied
@ApplyMiddleware(betterAuthMiddlewareServiceIdentifier)
@Controller('/api')
export class GoodController {
@Get('/profile')
public async getProfile(
@HonoUserSession() session: UserSession<BetterAuthOptions>,
): Promise<UserSession<BetterAuthOptions>> {
return session;
}
}
Related
UserSession- The session data structure- Container Modules - For setting up Better Auth