web-dev-qa-db-fra.com

Comment se connecter avec "UserName" au lieu de "Email" dans MVC Identity?

Je dois configurer mon identifiant pour utiliser le nom d'utilisateur au lieu de l'adresse e-mail. Comment puis-je le changer?

14
Kevin Maxwell

En fait, il utilise l'adresse de messagerie comme nom d'utilisateur. Ainsi, dans la table ASPNetUsers, vous verrez les champs de nom d'utilisateur et de messagerie avec l'adresse de messagerie.

Allez dans le AccountController, cherchez la méthode Register (POST). 

Change ça:

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

pour ça:

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

Ensuite, allez dans Login.cshtml et modifiez tous les champs de modèle de courrier électronique correspondant en nom d'utilisateur.

Enfin, entrez dans la méthode de connexion (POST) dans AccountController et remplacez model.Email par model.UserName.

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

Vous devez également apporter des modifications à AccountViewModels.cs afin d'introduire votre nouvelle propriété UserName.

20
Jason Roner

Voici comment vous le faites

 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*/
 }

Vous pensez avoir un utilisateur ayant nom d'utilisateur = test et email = [email protected], alors vous souhaitez autoriser les utilisateurs à s'authentifier à l'aide de test au lieu de myemail @ ... `

PS. Pendant que la réponse de @Jason fonctionne, vous souhaitez parfois authentifier un utilisateur avec un nom d'utilisateur et un mot de passe réels, sans utiliser l'e-mail.

Dans ce cas, utilisez ma réponse

1
Bellash