v1.0.0 — Identity, accounts & read endpoints
First release of glueful/users — the first-party identity store and account
lifecycle for Glueful — now including config-driven account read endpoints.
Endpoints
GET /me— authenticated principal's account + nestedprofile(always on).GET /users/{uuid}— another user's account + public profile. Off by default
(USERS_USER_LOOKUP_ENABLED=true), requiresusers.read.GET /users— paginated list + nested public profile. Off by default
(USERS_USER_LOOKUP_ENABLED=trueandUSERS_USER_LIST_ENABLED=true), requires
users.read. Supports?page/?per_page(clamped), per-item?fields=, and
?filter[...]/?sort/?searchover username + profile name.
Also in 1.0.0 (foundation)
- First-party user store (
users+profiles) andUserRepository. - Identity seam (
UserProvider→ coreUserProviderInterface). - Account-lifecycle endpoints (
/authemail verification + password recovery). - Email-PIN two-factor authentication (
/2fa,TWO_FACTOR_ENABLED).
Highlights
- Safe by default — per-audience exposable columns, hard denylist
(password/deleted_at/user_uuid), customprofilescolumns opt-in only. - Field selection — prune-only REST dot-paths; disallowed fields omitted (never a
400); all-disallowed →{}. - List safety — single LEFT JOIN (no N+1); soft-deleted profiles never affect
membership or ordering; email filtering gated;statusnot filterable by default.
Configuration
| Env | Default | Effect |
|---|---|---|
USERS_USER_LOOKUP_ENABLED |
false |
Enables GET /users/{uuid} |
USERS_USER_LIST_ENABLED |
false |
Enables GET /users (also needs lookup on) |
USERS_USER_LIST_ALLOW_EMAIL_FILTER |
false |
Allow email in list filter/search |
Exposable columns are configured in config/users.php (copy into your app's config/
to override).
Requirements
- PHP 8.3+
glueful/framework ^1.50.1glueful/email-notification(suggested) for password-reset / verification delivery
Full changelog: see CHANGELOG.md.