Ich muss mein Login so einrichten, dass Benutzername anstelle der E-Mail-Adresse verwendet wird. Wie kann ich es ändern?
Die E-Mail-Adresse wird tatsächlich als Benutzername verwendet. In der Tabelle ASPNetUsers sehen Sie sowohl den Benutzernamen als auch die E-Mail-Felder mit der E-Mail-Adresse.
Gehen Sie in den AccountController und suchen Sie nach der POST-Methode.
Ändere das:
var user = new ApplicationUser { UserName = model.Email, Email = model.Email};
zu diesem:
var user = new ApplicationUser
{
UserName = model.UserName,
Email = model.Email
};
Gehen Sie dann in die Login.cshtml und ändern Sie stattdessen alle entsprechenden E-Mail-Modellfelder in Benutzername.
Gehen Sie schließlich in die Login-Methode (POST) im AccountController und ändern Sie model.Email in model.UserName.
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password,
model.RememberMe, shouldLockout: false);
Sie müssen auch Änderungen in AccountViewModels.cs vornehmen, um Ihre neue UserName-Eigenschaft einzuführen.
So machen Sie es
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*/
}
Stellen Sie sich vor, Sie haben einen Benutzer mit Benutzername = test
und E-Mail = [email protected]
. Dann möchten Sie Benutzern die Authentifizierung mit test anstelle von myemail @ ... `erlauben
PS. Während die Antwort von @ Jason funktioniert, möchten Sie manchmal einen Benutzer mit echtem Benutzernamen und Kennwort authentifizieren, ohne die E-Mail-Adresse zu verwenden.
In diesem Fall verwenden Sie meine Antwort