ADR-004: Enrollment Only, No User Registration
- Status
-
Accepted
- Date
-
2026-03-14
- Decision-makers
-
Sebastian Mendel
Context
TYPO3 core has no built-in FE user registration. Extensions like femanager and
sf_register fill this gap. The question is whether nr_passkeys_fe should
include its own registration flow (create new fe_user + passkey in one step).
Three approaches were considered:
A. Enrollment only — Passkeys for existing fe_users, PSR-14 hooks for integrations B. Enrollment + basic registration — Minimalist registration form C. Enrollment + registration hooks — No form, but callable service
Decision
Option A with Option C's hooks.
- Only existing fe_users can enroll passkeys through the management plugin or post-login enrollment flow.
- A
PasskeyEnrollmentServiceis provided as a public service that registration extensions can call programmatically. - PSR-14 events (
BeforePasskeyEnrollmentEvent,AfterPasskeyEnrollmentEvent) allow third-party extensions to hook into the enrollment lifecycle.
Consequences
Positive:
- Focused scope: no competition with femanager/sf_register
- Clean separation of concerns (registration vs. authentication)
- PSR-14 events enable any registration extension to add "Register with Passkey"
- Smaller codebase, fewer security surfaces
Negative:
- No out-of-box "Register with Passkey" experience
- Integrators must configure registration extensions separately
- Higher setup effort for new installations
Mitigation:
- Documentation includes integration guides for femanager and sf_register
PasskeyEnrollmentServicehas a simple API:enroll(int $feUserUid, ...): FrontendCredential- Example code in developer guide for calling enrollment from custom registration forms
Alternatives Considered
Option B (Basic registration): Tempting for simplicity, but any registration form immediately requires: email verification, CAPTCHA, terms acceptance, profile fields, GDPR consent. This is a rabbit hole that existing extensions handle better.