Call it an Alias
I can enter email or username? The text box says Enter email/username; Should I enter both email and username? Uh... what was the username I entered while signing up? --- User
If the users of your site need to identify each other, then of course use a unique handle, but call it an alias, instead of username. And I would mainly encourage users to login via email, especially because users will make browsers remember the username, but forget when they occasionally try to log-in with another computer.
So let me get to the real question: If username is required for registration, but optional for login (email can be used instead), should it be part of the register form?
You say that "username is required for registration". If username is required then it should be a part of the registration form, for obvious reasons.
You can make username/alias optional in the registration form. In this scenario you can do two things.
- Ask the user to choose a username/alias on their very first login, before actually doing anything with the site: I don't think this is very different from requiring a username/alias on the signup screen, because most users will login straight after they finish the signup process.
- Create a username/alias "under water": There is one bad thing about this. Automatic usernames like (Ahem!)
user1461424 are awful. That makes users feel like they are one of few million numbered cells in the matrix.
Heroku uses a nice scheme to default-name the apps users are creating. They are a combination of two random words, but are memorable and makes the user preserve them. (I once got "whispering beyond" for one of my apps). Here's one way you can do this: If you have a list of large number of adjectives and nouns, you can make nice usernames.
And you can combine the words and make usernames:
Well it always doesn't produce cool names, but that's one way of doing it. Try to come up with your own creative ideas for automatically generating usernames, rather than making user just a sequence number in the database.