Asp Net Core Login: Email wird nicht erkannt
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
//--<checkuser>--
varuser=await_userManager.FindByEmailAsync(model.Email);
if(user==null)
{
//*old:Don'trevealthattheuserdoesnotexist
//*old:returnRedirectToAction(nameof(ResetPasswordConfirmation));
//returnRedirectToAction(nameof(Register));
ModelState.AddModelError("","emailnotfoundorpasswordwrong.");
returnView(model);
}
//--</checkuser>--
|
Anschliessend übernimmt man den Username und übergibt diesen als ersten Parameter
stringUsername=user.UserName;
varresult=await_signInManager.PasswordSignInAsync(Username,model.Password,model.RememberMe,lockoutOnFailure:false);
|
Komplettes Login, Asp.Net Core 2 MVC
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
publicasyncTask<IActionResult>Login(LoginViewModelmodel,stringreturnUrl=null)
{
//--------------<Login_Postback()>--------------
ViewData["ReturnUrl"]=returnUrl;
if(ModelState.IsValid)
{
//--<checkuser>--
varuser=await_userManager.FindByEmailAsync(model.Email);
if(user==null)
{
//*old:Don'trevealthattheuserdoesnotexist
//*old:returnRedirectToAction(nameof(ResetPasswordConfirmation));
//returnRedirectToAction(nameof(Register));
ModelState.AddModelError("","emailnotfoundorpasswordwrong.");
returnView(model);
}
//--</checkuser>--
stringUsername=user.UserName;
varresult=await_signInManager.PasswordSignInAsync(Username,model.Password,model.RememberMe,lockoutOnFailure:false);
if(result.Succeeded)
{
//-<ok>-
_logger.LogInformation("Userloggedin.");
returnRedirectToLocal(returnUrl);
//-</ok>-
}
|