diff --git a/src/auth.ts b/src/auth.ts
index 307f279..f5b45d8 100644
--- a/src/auth.ts
+++ b/src/auth.ts
@@ -18,7 +18,11 @@ class AuthInfo {
 function authenticate(roles: RoleName[] = []) {
   return function (route: any, method: string) {
     const routeClass = (<typeof Route> route.constructor);
-    routeClass.preRequestHandlers[method] = async (req: Request): Promise<AuthInfo> => {
+    if (!routeClass.preRequestHandlers[routeClass.name]) {
+      routeClass.preRequestHandlers[routeClass.name] = {}
+    }
+
+    routeClass.preRequestHandlers[routeClass.name][method] = async (req: Request): Promise<AuthInfo> => {
       let user: Optional<User>;
       let session: Optional<UserSession>;
 
diff --git a/src/routes/Route.ts b/src/routes/Route.ts
index 81da82d..d109fb7 100644
--- a/src/routes/Route.ts
+++ b/src/routes/Route.ts
@@ -14,8 +14,8 @@ import { logRequest } from '../helpers/logging';
 
 abstract class Route {
   protected readonly path: string;
-  // Method -> Handler mapping
-  public static preRequestHandlers: Record<string, RequestHandler> = {};
+  // Route -> Method -> Handler mapping
+  public static preRequestHandlers: Record<string, Record<string, RequestHandler>> = {};
 
   constructor(path: string) {
     this.path = path;
@@ -76,9 +76,10 @@ abstract class Route {
     logRequest(req);
 
     try {
+      const routeClass = <typeof Route> this.constructor;
       // @ts-expect-error
       const handler = (this[handlerName]) as ((req: Request, res: Response, auth: AuthInfo) => Promise<void>);
-      const preRequestHandler = (<typeof Route> this.constructor).preRequestHandlers[handlerName];
+      const preRequestHandler = routeClass.preRequestHandlers[routeClass.name]?.[handlerName];
 
       let authInfo: Optional<AuthInfo>
       if (preRequestHandler) {