Skip to main content

Authentication Flow

Flow

Client                          Rotifex Server
| |
|-- POST /auth/register ----------> | Hash password, create user
|<- { user } ---------------------- |
| |
|-- POST /auth/login -------------> | Verify password
|<- { accessToken, refreshToken }-- |
| |
|-- GET /api/products |
| Authorization: Bearer <token> > | Verify JWT, inject x-user-id/x-user-role
|<- { data: [...] } --------------- |
| |
|-- POST /auth/refresh -----------> | Verify refresh token, issue new pair
|<- { accessToken, refreshToken }-- |

Token Details

TokenAlgorithmTTLSecret Env Var
Access TokenHS2561 hourJWT_SECRET
Refresh TokenHS25630 daysJWT_REFRESH_SECRET

Secrets are auto-generated and saved to .env on first startup if not explicitly set.

Required Headers

HeaderValueSet By
AuthorizationBearer <accessToken>Client
x-user-idUser UUIDJWT middleware (auto-injected)
x-user-roleuser or adminJWT middleware (auto-injected)

Permission Levels

RoleAccess
userPublic endpoints, own files, own data records
adminAll endpoints including /admin/api/*

The JWT middleware skips all /auth/* routes. For /auth/me, the token is manually verified inside the handler.