ADR 0001 — Fjern legacy-JWT-resterne efter Better Auth-migreringen¶
Status: Besluttet (juni 2026) Kontekst: docs/STATUS-AUDIT.md §5 punkt 6
Kontekst¶
Platformen migrerede fra egen JWT-auth til Better Auth (cookie-baserede sessions). Migreringen efterlod:
services/auth.service.ts+controllers/auth.controller.ts+routes/auth.routes.ts— hele den gamle auth-kæde. Router-filen var ikke mountet iroutes/index.ts, så koden var død.- Schema-felter på
users:verificationToken,resetPasswordToken,resetPasswordExpires,refreshToken. - Dobbelt-secret:
BETTER_AUTH_SECRET || JWT_SECRET || ''iconfig/auth.ts, ogJWT_SECRETsom påkrævet env-var.
Verifikation før fjernelse (hvad bruger faktisk hvad?)¶
| Forbruger | Bruger legacy-JWT? | Faktisk mekanisme |
|---|---|---|
| HTTP-API | Nej | authenticate-middleware kalder auth.api.getSession() med request-cookies (Better Auth) |
| Socket.io | Nej | config/socket.ts læser Better Auth-session fra handshake-cookies (fromNodeHeaders) — ingen token i query/headers |
| OnlyOffice | Nej — egen, separat secret | workroom.controller.ts signerer/verificerer med ONLYOFFICE_JWT_SECRET via jsonwebtoken. Dette er Document Server-protokollens JWT og er uafhængig af bruger-auth. Beholdes. |
| Frontend | Nej | axios med withCredentials (cookies); ingen Bearer-tokens (utils/api.ts) |
Konklusion: Intet i den kørende app brugte JWT_SECRET eller de fire
schema-felter. jsonwebtoken-pakken beholdes alene til
OnlyOffice-protokollen.
Beslutning¶
- Slet den døde auth-kæde (
auth.service.ts,auth.controller.ts,auth.routes.ts;types/auth.tsreduceret til det der faktisk bruges). - Migration
20260610120000_remove_legacy_jwt_fieldsdropperverificationToken,resetPasswordToken,resetPasswordExpiresogrefreshTokenpåusers. (Better Auths egneAccount.refreshToken- felter er urørte.) Migrationen er testet mod en kopi af produktionsdata. BETTER_AUTH_SECRETer nu påkrævet ved boot; koden læser ikke længereJWT_SECRET. docker-compose beholderBETTER_AUTH_SECRET=${BETTER_AUTH_SECRET:-${JWT_SECRET}}så eksisterende deployments, der kun har satJWT_SECRET, beholder deres effektive session-secret uden geninstallation.
Konsekvenser¶
- Ingen sessions invalideres: den effektive secret er uændret i alle
miljøer (CI/prod har
BETTER_AUTH_SECRETsat; compose-fallback dækker resten). email.service.ts(verifikations-/reset-mails) har ikke længere nogen kaldere — den beholdes som grundlag for en kommende Better AuthemailVerification-opkobling, men kan slettes hvis den ikke tages i brug.- Nye instanser skal sætte
BETTER_AUTH_SECRET(fail-fast ellers).