Skip to content

Auth

The Express API uses JWT-based authentication with separate secrets and strategies for different user roles. Cookies are used to store tokens for web clients.

Auth Architecture

┌──────────────────────┐
│   Client sends       │
│   request + cookie   │
└──────────┬───────────┘


┌──────────────────────────────────────┐
│        Auth Middleware Chain         │
│                                      │
│  authMiddleware     → Requires JWT    │
│  adminMiddleware    → Requires admin  │
│  softAuthMiddleware → Optional auth   │
│  userAuthMiddleware → Requires user   │
└──────────────────────────────────────┘

JWT Tokens

TokenSecret Env VarPayloadUsed For
User/Supplier JWTJWT_SECRET{ id, email, role }Travelers, Suppliers
Admin JWTJWT_SECRET_ADMIN{ id, email, role }Admin panel

Token expiry: JWT_EXPIRY (default 7 days = 604800000ms)

Auth Endpoints

MethodEndpointAuthDescription
POST/auth/loginPublicLogin with email + password
POST/auth/registerPublicRegister new user
POST/auth/verify-emailPublicVerify email with token
POST/auth/forget-passwordPublicSend password reset email
POST/auth/reset-password/:tokenPublicReset password with token
POST/auth/logoutAnyClear auth cookie

Login

POST /api/v1/auth/login
Body: { email: string, password: string }
Response: { token: string, user: { id, name, email, role } }

Sets auth_token cookie (httpOnly, secure in production).

Register

POST /api/v1/auth/register
Body: { name: string, email: string, password: string }
Response: { message: string, user: { id, name, email } }

Triggers verification email via Resend.

Admin Auth

Admins authenticate separately with the adminMiddleware:

POST /api/v1/admin/login
Body: { email: string, password: string }
Response: { token: string, admin: { id, username, role } }

Sets admin_token cookie.

Middleware Reference

MiddlewareFileBehavior
authMiddlewaremiddlewares/auth.middleware.tsRequires valid JWT; rejects with 401 if missing/expired
adminMiddlewaremiddlewares/admin.middleware.tsRequires valid admin JWT; rejects with 401 if missing/expired
softAuthMiddlewaremiddlewares/softAuth.middleware.tsOptional — attaches user to request if token present; continues if not
userAuthMiddlewaremiddlewares/userAuth.middleware.tsRequires valid user JWT (not admin)

Password Security

  • Passwords are hashed with bcrypt (salt rounds: 10)
  • Email verification required before full access
  • Password reset flow uses time-limited JWT tokens sent via email
  • Verification tokens are generated at registration and sent via Resend

Built with VitePress