• Claude's avatar
    Make login credentials case- and format-insensitive · 60eabb70
    Claude authored
    Postgres '=' is case-sensitive, so a user stored as 'Km...@gmail.com'
    could not log in from a phone keyboard that lowercases the email field.
    The lookup in AuthService returned null before Hash::check ever ran, so
    this presented as "wrong password" and was invisible in login_history —
    that table is only written once a user has been found.
    
    On OC-Sport this affected 8 of 26 accounts, and had already produced one
    duplicate registration: a user who could not get in simply signed up
    again with the same address in lowercase.
    
    - CredentialNormalizer: one canonical shape for emails and phones
    - AuthService: case-insensitive email lookup, deterministically ordered
      so a pre-existing case-duplicate pair resolves to the account actually
      in use rather than an arbitrary row; phone lookup matches local and
      +20 forms
    - User: set-mutators so new rows are stored canonical
    - Migration: normalises existing rows, skipping and logging any that
      would collide, since those are duplicate accounts needing a human
      merge rather than a guess
    Co-Authored-By: 's avatarClaude Opus 5 <noreply@anthropic.com>
    60eabb70
Name
Last commit
Last update
..
Feature Loading commit data...
Unit Loading commit data...
TestCase.php Loading commit data...