f080d05dd619118ab62a14fbfc6b1701aae2e9de
The login address was only trimmed, so the casing somebody happened to type at their very first login was frozen into the user row forever — createOrUpdateLocalUser() never wrote the address back. Everything downstream re-sends the stored address rather than the one just authenticated with, which also leaked that casing into the OAuth2 email claim and the log identities. Harmless in practice, since BusPro matches an address case-insensitively and so does the utf8mb4_unicode_ci column, but it left User out of step with the newsletter entities, which have always normalized. Fold the case once in authenticate(), which covers the BusPro calls, the lookup and a new account alike, and write the address back on every login so an account created before this converges instead of staying frozen. No backfill: a row nobody logs into again is matched case-insensitively either way. Co-Authored-By: Claude Opus 5 <[email protected]>
Description
No description provided
11 MiB
Languages
PHP
87.9%
Twig
10.7%
JavaScript
1%
CSS
0.4%