Problem:
beim Login über ein Asp Net Login-Formular wird die Email nicht erkannt.
Betrifft:
Asp.Net Core 2 MVC Identiy
Ursache:
In der Standard-Software Vorgabe von Asp.Net Core MVC Anwendungen wird beim Einbinden der Microsoft Identity der AccountControler.cs falsch erstellt.
Die Login-Methode frägt nach dem User ab und nicht nach der Email.
_signInManager.PasswordSignInAsync(Username, model.Password, model.RememberMe, lockoutOnFailure: false); |
Man muss deshalb vor dem Aufruf der der PasswordSignIn Methode noch den User als Username ermitteln.
Hierzu kann man den User mit dem _userManager ermitteln
//--< check user >-- var user = await _userManager.FindByEmailAsync(model.Email); if (user == null) { //*old: Don't reveal that the user does not exist //*old: return RedirectToAction(nameof(ResetPasswordConfirmation)); //return RedirectToAction(nameof(Register)); ModelState.AddModelError("", "email not found or password wrong."); return View(model); } //--</ check user >--
|
Anschliessend übernimmt man den Username und übergibt diesen als ersten Parameter
string Username = user.UserName; var result = await _signInManager.PasswordSignInAsync(Username, model.Password, model.RememberMe, lockoutOnFailure: false);
|
Komplettes Login, Asp.Net Core 2 MVC
[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) { //--------------< Login_Postback() >-------------- ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { //--< check user >-- var user = await _userManager.FindByEmailAsync(model.Email); if (user == null) { //*old: Don't reveal that the user does not exist //*old: return RedirectToAction(nameof(ResetPasswordConfirmation)); //return RedirectToAction(nameof(Register)); ModelState.AddModelError("", "email not found or password wrong."); return View(model); } //--</ check user >--
string Username = user.UserName; var result = await _signInManager.PasswordSignInAsync(Username, model.Password, model.RememberMe, lockoutOnFailure: false); if (result.Succeeded) { //-< ok >- _logger.LogInformation("User logged in."); return RedirectToLocal(returnUrl); //-</ ok >- }
|