Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to login with "UserName" instead of "Email" in MVC Identity?

Tags:

I need to set my login to use username instead of email address, how can I change it?

like image 635
Kevin Maxwell Avatar asked Oct 11 '15 19:10

Kevin Maxwell


2 Answers

It's actually using the e-mail address as the username, so in the ASPNetUsers table, you'll see both the username and email fields with the email address.

Go into the AccountController, look for Register method (POST).

Change this:

var user = new ApplicationUser { UserName = model.Email, Email = model.Email}; 

to this:

var user = new ApplicationUser             {                 UserName = model.UserName,                 Email = model.Email             }; 

Then go into the Login.cshtml and change all corresponding e-mail model fields to username instead.

Finally, go into the Login method (POST) in the AccountController and change model.Email to model.UserName.

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password,               model.RememberMe, shouldLockout: false); 

You also have to make changes in AccountViewModels.cs in order to introduce your new UserName property.

like image 181
Jason Roner Avatar answered Sep 22 '22 08:09

Jason Roner


Here is how you do it

 var user = await _userManager.Users            .FirstOrDefaultAsync(u => u.UserName == username || u.Email == username);   if (user != null){     var result = await _signInManager                 .PasswordSignInAsync(/*email*/user.Email, password, false, false);     /*removed for brevity*/  } 

Think you have a user having username=test and email=[email protected] then you would like to allow users to authenticate using test instead of myemail@... `

PS. While the answer from @Jason works, sometimes you'd like to authenticate a user with real username and password, not using the email.

In this case use my answer

like image 22
Bellash Avatar answered Sep 19 '22 08:09

Bellash