Non ho capito quel codice dove va all'interno del processo di login, comunque mi sembra una ridondanza inutile, questi sono i passi che farei io.
Partiamo con l'utente che ti invia username e password per fare il login, tu poi:
- cerchi nel db l'utente tramite la mail, così sei sicuro che la mail appartiene a lui
- a questo punto avrai un oggetto utente con dentro id, email e password
- verifichi la correttezza della password confrontando gli hash tra quella inviata e quella nel db
- se la pass è corretta crei la sessione e imposti le varie variabili di sessione che ti servono
- se la pass non è corretta non crei la sessione e gestisci l'errore
Quello che fai tu è ricontrollare email e password subito dopo che l'utente si è loggato, ho capito bene?
In questo caso è inutile, perché entrambe i controlli sono stati fatti in fase di login, quindi rifarli è superfluo.