All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- CI static analysis: PHPStan ignore patterns now tolerate version drift
(newer PHPStan reports
ArrayAccesswith generics), and unmatched ignore patterns no longer fail the run. No runtime code changes.
- Support for string (UUID) user primary keys.
VerificationComponentno longer casts the identity id toint:identityId()now returns the raw integer or string key (falling back to0when the identity has no identifier), and user lookups for email verification pass the entity id through unchanged. Integer-keyed apps are unaffected. OTP storage already used string identity keys, so no storage changes were needed.
TotpVerificatornow throttles failed verification attempts per identity (default: 5 attempts per 300 seconds, then lockout until the window expires). Prevents brute forcing of TOTP codes. Configurable viadrivers.totp.options.throttleorVERIFICATION_TOTP_THROTTLE_MAX/VERIFICATION_TOTP_THROTTLE_WINDOW; setmaxto0to disable. Throttling is skipped when the identity has no id field, so existing integrations keep working unchanged.
- Default
emailVerifiedfield alias for theemailOtpdriver inconfig/verification.phpwasemailVerifiedAt(camelCase); corrected toemail_verified_atto match the driver default and all other column defaults. Apps overriding the column viaVERIFICATION_DB_COL_EMAIL_VERIFIED_ATor app config are unaffected.
CacheOtpStoragelogs a warning when the configured cache profile is missing and the per-requestArrayengine fallback is used (OTP codes do not survive across requests in that case).
- Restructured to remove duplication:
docs/env.mdis now the single source of truth for environment variables (including a variable to config key map), database schemas and the example migration live only indocs/installation.md, and encryption key generation only in the crypto API docs. - New central documentation index at
docs/index.md; per-file footer navigation tables replaced with a single link. - Documented TOTP brute force protection and the cache fallback behaviour.
- Corrected driver docblocks (
options.*key paths, TOTPperiodnaming).
- Initial release: verification flow for CakePHP 5 with
emailVerify,emailOtp,smsOtp, andtotpsteps,VerificationComponent,VerificationHelper, cache-backed OTP storage with rate limiting and lockout, pluggable SMS transports, and TOTP secret encryption at rest (Sodium / AES-256-GCM).