• 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
..
DTOs Loading commit data...
Events Loading commit data...
Exceptions Loading commit data...
Helpers Loading commit data...
Models Loading commit data...
Services Loading commit data...
Traits Loading commit data...