• 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
..
Attendance Loading commit data...
Audit/Models Loading commit data...
Document Loading commit data...
Event Loading commit data...
Facility Loading commit data...
Financial Loading commit data...
HR Loading commit data...
Identity Loading commit data...
Inventory Loading commit data...
Notification Loading commit data...
POS Loading commit data...
Participant Loading commit data...
Pricing Loading commit data...
Scheduling Loading commit data...
Shared Loading commit data...
Training Loading commit data...
Website Loading commit data...
WhatsApp Loading commit data...