Я использую Asp. Net Core Razor Pages с идентификацией. В настоящий момент у меня для RequireConfirmedAccount установлено значение true в методе ConfigureServices класса Startup, и я проверяю подтвержденный адрес электронной почты следующим образом:
ApplicationUser user = await userManager.FindByEmailAsync(Email);
if (user != null)
{
bool emailConfirmed = await userManager.IsEmailConfirmedAsync(user);
if (emailConfirmed != true)
{
return RedirectToPage("/Account/ConfirmEmail");
}
else
{
var result = await signInManager.PasswordSignInAsync(Email, Password,
RememberMe, lockoutOnFailure: true);
if (result.IsLockedOut)
{
return RedirectToPage("/Account/Lockout");
}
if (result.Succeeded)
{
// etc
Проблема заключается в том, что злонамеренный пользователь может обнаружить, что существует учетная запись для этого адреса электронной почты в базе данных, не зная пароля. В идеале я хотел бы иметь возможность подтвердить, что пользователь знал пароль, прежде чем сообщить им, что необходимо подтвердить адрес электронной почты учетной записи, например что-то вроде:
if (result.SucceededButEmailNotConfirmed)
{
return RedirectToPage("/Account/ConfirmEmail");
Есть ли хороший способ сделать это? Единственное решение, которое я до сих пор придумала, - установить для RequireConfirmedAccount значение false, затем после успешного входа в систему проверить код, подтвержден ли адрес электронной почты, и выйти из системы, если пользователь не подтвердил. Есть ли лучший способ сделать это, или я что-то упустил? Спасибо