ASP.Net UserName to Email

asp.net, asp.net-identity, asp.net-mvc-5

Solution

If you really want to use e-mail address to log in, then, IMHO, the "hack" you suggested is the best approach. Because, if you insist on "doing it properly" you'll have to at least

- modify the database schema, obviously

- ensure username uniqueness yourself (you could make a database constraint/index do this for you, but you'll have to find a good way to deal with errors and reporting them to the user)

- find a good substitute for just writing "User.Identity.UserName" in you code

- probably even more

On the other hand, if you decide to "hack" the UserName field you need to

- modify RegisterViewModel validation (add [EmailAddress] to the UserName property), probably slightly customize [Display(Name=...)] etc.

make sure UserManager.UserValidator instance used in your AccountController allows special characters used in e-mail addresses. To do this, make sure its nondefault constructor looks like this:

public AccountController(UserManager<ApplicationUser> userManager)
{
    UserManager = userManager;
    var userValidator = UserManager.UserValidator as UserValidator<ApplicationUser>;
    userValidator.AllowOnlyAlphanumericUserNames = false;
}

I hope this could help you weigh the pros and cons of both approaches and come up with the best solution. Good luck!

Problem

I am working with the new ASP.NET Identity (RTM) and I was wondering how would I go on about changing registering and login from being a UserName to an Email. The idea is that I want my users to sign up using their e-mail and a password (e-mail can also be acquired using external login) and they set-up a display name/username on top. I've looked at IdentityUser and I can see that UserName is there, however since that is packed in ASP.Net Identity that can not be changed. I know I could use 'UserName' as a e-mail, with a custom validator and then have an extra attribute for ApplicationUser called DisplayName but that is more of a hack than a solution. I hope my question is clear. Thanks in advance.

Original source

Related problems