Skip to main content

Email as the Primary Login Identifier

Context

Coexisting username and email identifiers caused login ambiguity and unique-constraint conflicts.

Decision

Login identifiers are dispatched by whether they contain @ (the username charset and email are mutually exclusive, guaranteeing no ambiguity); email is required, and registration/login share normalizeEmail; username is optional but keeps its UNIQUE constraint (NULL exempt); the login path validates most leniently (regex applies only to registration/password change); the API field name stays username for compatibility; the OIDC name falls back to email.

Consequences and Current State

The V020 migration is in the repository; the login semantics in operational documents such as verification-checklist follow this ADR.