Wir haben Asp.Net Core angepasst, um unsere Tabelle der Schüler anstelle der AspNetUser Tabelle zu verwenden. Alles funktioniert gut für neue Studenten. Aber wir müssen die vorhandenen Schülerpasswörter aktualisieren. Ich möchte so etwas wie dies tun (in AccountController
Login
-Methode), wenn ein Schüler-Anmeldungen oder diese auf eine einmalige Basis getan werden könnte ...Asp.Net Core Identity, Aktualisierung bestehender Klartext Passwörter
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
// Require the user to have a confirmed email before they can log on.
var user = await _userManager.FindByEmailAsync(model.Email);
if (user != null)
{
if (user.PasswordHash == null)
{
user.EmailConfirmed = true;
user.UserName = model.Email;
user.NormalizedEmail = model.Email.ToUpper();
user.NormalizedUserName = user.NormalizedEmail;
//user.PasswordHash = ?;
//user.SecurityStamp = ?;
//update user in database.
}
//continue on with login process
}
}
}
Der Code unten (von der Register
Methode) erstellt einen neuen Benutzer und fügt ihn zur Datenbank hinzu. Das ist nicht was wir wollen.
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
// …
Wie soll sich der Benutzer einloggen, wenn der Passwort-Hash scheinbar "null" ist? Welches Passwort würde der Benutzer dann verwenden, und wie würden Sie überprüfen, dass es der tatsächliche Benutzer ist? – poke
Warum sperren Sie nicht alle Benutzer, die ihr Kennwort ändern sollten, und erklären Sie dann, dass sie ein neues Kennwort mithilfe des Links "Kennwort vergessen" anfordern müssen? Auf diese Weise generiert Identity ein Token zum Zurücksetzen des Kennworts, mit dem die Benutzer dann ihr eigenes Kennwort richtig festlegen können. – poke
Die Schüler melden sich mit ihrem Klartext-Passwort an. Wenn ich eine E-Mail-Adresse und ein Passwort gefunden habe, weiß ich, dass es sich um einen autorisierten Benutzer handelt, zumindest auf dem Niveau der Vergangenheit. - Dieser Code ist bevor Sie an den Punkt gelangen, an dem das Identity-System den Passwort-Hash überprüft. Wenn ich das schaffen könnte, wäre die Änderung für den Benutzer völlig transparent. –