We need a way to have users start out as role = guest, then login to have role = user or role = admin.
Requirements:
1. Login should send email to address that user has to click on link to confirm
2. Login should check to make sure username is not already taken
3. Login should validate email address
4. User should be able to ask system to resend their password if they have forgotten it
I have attached a write-up based on the SourceForg login process, which is very good, for inspiration!
User registration on sourceforge example