Identité 2.0 Tentative De Connexion Non Valide
Pour une raison que je suis encore à découvrir, mais après un enregistrement réussi, et l'activation, je ne peux pas me connecter avec l'adresse e-mail, au lieu de cela, j'obtiens une erreur "Invalid tentative de connexion".
Comme ASP.NET Identité 2.0 s'est améliorée avec l'utilisation de l'e-Mail de connexion, j'ai modifié le formulaire d'inscription à enregistrer un vrai nom d'utilisateur que l'enregistrement était juste de la dupliquer en stockant nom d'utilisateur avec l'adresse e-mail.
Veuillez voir ci-dessous le code standard qui vient avec Install-Package Microsoft.AspNet.Identity.Samples -Pre'
à la suite de la création d'un vide ASP.NET Application Web (MVC) projet:
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
Ma fonction est maintenant comme suit:
var user = new ApplicationUser { TitleId = model.TitleId, SexId = model.SexId, Forename = model.Forename, Surname = model.Surname, UserName = model.UserName, Email = model.Email, JoinDate = System.DateTime.Now };
Comme vous pouvez le voir le nom d'utilisateur est désormais une valeur à partir d'un formulaire. C'est bien beau, sauf que maintenant je ne peux pas l'ouverture de session après l'enregistrement et l'activation. Le seul travail round est de modifier l'enregistrement en plaçant la valeur du champ adresse e-Mail dans le champ nom d'utilisateur, ce qui semble juste de daft.
Quelqu'un peut-il veuillez indiquer ce que je pourrais avoir manqué?
- Vous nee plus que juste un changement. Voir mon billet de blog à ce sujet: marcinjuraszek.com/2014/03/...
- Merci, j'ai lu l'article, c'est de modifier le login de l'utilisateur nom d'utilisateur au lieu de l'e-Mail. Mais je veux connecter en tant que e-Mail, mais également e-Mail et nom d'utilisateur séparer les valeurs. J'ai remarqué que vous lié à un autre article qui devrait répondre à ma question, mais le code est différent pour mon nom d'action, le code suggèrent
var user = await UserManager.FindByNameOrEmailAsync(model.UserName, model.Password);
mais mon Login action utilisevar result = await SignInHelper.PasswordSignIn(model.Email, model.Password, model.RememberMe, shouldLockout: false);
.
Vous devez vous connecter pour publier un commentaire.
Vous devez modifier
SignInHelper.PasswordSignIn
méthode. Par défaut, il utiliseFindByNameAsync
pour vérifier si l'utilisateur avec le nom donné existe:modifier pour utiliser
FindByEmailAsync
:Vous pouvez trouver
SignInHelper
classe *AppCode\IdentityConfig.cs` fichier.var user = await UserManager.FindByNameAsync(userName);
a fait le tour 🙂AddDefaultUI
, et ne fonctionne toujours pas.Dans la classe AccountController.cs, méthode:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
.Modifié ceci:
À ceci:
La raison en est
UserName
etUserEmail
ont des valeurs différentes, mais la méthodePasswordSignInAsync
utilise uniquementUserName
pour vérifier la connexion.J'ai eu le même problème, mais a trouvé la solution pour être une combinaison de deux de la a accepté de répondre par Marcin et la réponse par Hai. Dans
AccountController.cs
vous devez utiliserFindByEmailAsync()
, au lieu deFindByNameAsync()
, puis utilisezSignInManager.PasswordSignInAsync()
mais l'utilisation de la valeur deuser.UserName
comme premier argument (tant queuser
n'est pas nulle), au lieu demodel.Email
. Donc, une réponse complète, basée sur la chaudière de la plaque de code, serait quelque chose comme ceci: