Identity 2.0 " Ungültiger Login-Versuch
Aus irgendeinem Grund bin ich noch zu entdecken, aber nach einer erfolgreichen Registrierung und Aktivierung, ich kann mich nicht einloggen mit der E-Mail-Adresse, stattdessen erhalte ich die Fehlermeldung "Ungültiger login-Versuch".
Als ASP.NET Identität 2.0 hat sich verbessert, mit der Verwendung von E-Mail-login, habe ich geändert die Registrierung-Formular zum speichern einer true username als die bereits bestehender Registrierung schien einfach zu duplizieren durch speichern von Benutzername mit der E-Mail-Adresse.
Unten finden Sie die standard-code, der kommt mit Install-Package Microsoft.AspNet.Identity.Samples -Pre'
folgenden die Erstellung einer leeren ASP.NET Web-Anwendung (MVC) Projekt:
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
Meine Funktion ist nun wie folgt:
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 };
Wie Sie sehen können Benutzernamen erhält nun einen Wert aus einem Formular. Das ist ja alles schön und gut, außer ich kann jetzt nicht Anmeldung nach der Registrierung und Aktivierung. Die einzige Arbeit, die Runde ist zu ändern Sie den Datensatz, indem Sie den Wert aus dem Feld E-Mail in das Feld Benutzername, das scheint nur doof.
Kann jemand bitte beraten, was ich verpasst haben könnte?
- Nee dich mehr als nur eine änderung. Siehe mein Beitrag darüber: marcinjuraszek.com/2014/03/...
- Danke, ich habe diesen Artikel Lesen, ist es zum ändern der login für Benutzer-Benutzername anstatt der E-Mail. Aber ich möchte die login-E-Mail, aber auch E-Mail-Benutzernamen und als separate Werte. Ich bemerkte Sie im Zusammenhang mit einem anderen Artikel, welche Adresse sollte mein Problem der code ist aber anders, meine Login-action, die code vorschlagen
var user = await UserManager.FindByNameOrEmailAsync(model.UserName, model.Password);
aber meine Login-Aktion verwendetvar result = await SignInHelper.PasswordSignIn(model.Email, model.Password, model.RememberMe, shouldLockout: false);
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie ändern
SignInHelper.PasswordSignIn
Methode. Standardmäßig verwendet esFindByNameAsync
zu prüfen, ob Benutzer mit dem angegebenen Namen vorhanden ist:ändern, es zu verwenden
FindByEmailAsync
:Finden Sie
SignInHelper
Klasse *AppCode\IdentityConfig.cs " - Datei.var user = await UserManager.FindByNameAsync(userName);
war der trick 🙂AddDefaultUI
, und funktioniert immer noch nicht.In der Klasse AccountController.cs, Methode:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
.Geändert diese:
Zu diesem:
Der Grund ist
UserName
undUserEmail
haben unterschiedliche Werte, aber die MethodePasswordSignInAsync
nur verwendetUserName
zu überprüfen, für die log-in.Ich hatte das gleiche Problem aber die Lösung gefunden zu sein, eine Kombination von beiden akzeptiert Antwort von Marcin und die Antwort von Hai. In
AccountController.cs
müssen SieFindByEmailAsync()
stattFindByNameAsync()
, dann verwenden SieSignInManager.PasswordSignInAsync()
aber den Wert vonuser.UserName
als erstes argument (solangeuser
ist nicht null), stattmodel.Email
. So eine umfassende Antwort auf der Grundlage der aktuellen boiler-plate-code, wäre so etwas wie dieses: