How to login with “UserName” instead of “Email” in

2019-02-08 13:59发布

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

2条回答
我想做一个坏孩纸
2楼-- · 2019-02-08 14:24

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.

查看更多
甜甜的少女心
3楼-- · 2019-02-08 14:26

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=myemail@example.com 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

查看更多
登录 后发表回答