Asp Core: You need to confirm your email.
Fehlermeldung:
- You need to confirm your email.
|
Logik-Problem:
Wenn man unter der Standard-Vorgabe des Asp.Net Core MVC Identiy Controllers sich in einer Webseite anmeldet und dann aber die Account-Anmeldung verpasst, dann kommt man in das Problem, dass man immer die Meldung
You need to confirm your email antrifft, diese Bestätigungsemail aber nicht erneut erzeugen kann.
Lösung:
1) Confirmation bei ResetPasswort
Deshalb muss entweder in der ResetPassword Logik beim Reset auch automatisch die EmailConfirmation aktualisiert werden.
//<additionalconfirmemail>
if(user.EmailConfirmed==false)
{
user.EmailConfirmed=true;
await_dbContext.SaveChangesAsync();
}
//</additionalconfirmemail>
returnRedirectToAction(nameof(ResetPasswordConfirmation));
|
2) oder erneuetes Senden der Confirmation beim Versuch des Login
Controllers
/AccountController.cs->Login(..)
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
publicasyncTask<IActionResult>Login(LoginViewModelmodel,stringreturnUrl=null)
{
//--------------<Login_Postback()>--------------
ViewData["ReturnUrl"]=returnUrl;
if(ModelState.IsValid)
{
..
..
//--<checkemail-confirmation>--
//*rp:ifloginfailssucceeded,thencheckconfirmationagain
if(await_userManager.IsEmailConfirmedAsync(user)==false)
{
//<confirm>
varcode=await_userManager.GenerateEmailConfirmationTokenAsync(user);
varcallbackUrl=Url.EmailConfirmationLink(user.Id,code,Request.Scheme);
await_emailSender.SendEmailConfirmationAsync(model.Email,callbackUrl);
//</confirm>
ModelState.AddModelError("","Youneedtoconfirmyouremail.Confirmation-Emailwassendagain");
returnView(model);
}
//--</checkemail-confirmation>--
|
Unter Login
https://angebotsuche.de/Account/Login
Geänderte ResetPassword Logik
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
publicasyncTask<IActionResult>ResetPassword(ResetPasswordViewModelmodel)
{
//--------------<ResetPassword_Postback()>--------------
//<checkdatamodel>
if(!ModelState.IsValid)
{
returnView(model);
}
//</checkdatamodel>
//--<checkuser>--
varuser=await_userManager.FindByEmailAsync(model.Email);
if(user==null)
{
//Don'trevealthattheuserdoesnotexist
returnRedirectToAction(nameof(ResetPasswordConfirmation));
}
//--</checkuser>--
//--<ResetPassword>--
//stringsTest=user.PasswordHash;
varresult=await_userManager.ResetPasswordAsync(user,model.Code,model.Password);
if(result.Succeeded)
{
//<additionalconfirmemail>
if(user.EmailConfirmed==false)
{
user.EmailConfirmed=true;
await_dbContext.SaveChangesAsync();
}
//</additionalconfirmemail>
returnRedirectToAction(nameof(ResetPasswordConfirmation));
}
//--</ResetPassword>--
//<view>
AddErrors(result);
returnView();
//</view>
//--------------</ResetPassword_Postback()>--------------
}
|