Here is a simple method for allowing users to log in with either their username or their email address.
There is, of course, the Email as Username extension. That extension sets up users with their email address as their username. But that extension actually creates the WP required username as the user’s email address.
Instead, this process allows the user to log in using either their username or their email address. It’s not difficult to implement and leaves you with a clean process where you don’t have to worry about what to do when users change their email address.