Решение, которое я использовал для этого, состоит в том, чтобы запретить SignInAsyn c во время входа в систему POST, и да, это будет использовать информацию db.
В вашем методе входа в систему POST просто добавьте логическую проверку для свойства Email Verified перед выполнением SignInAsyn c. Вам не нужно полностью копировать приведенный ниже код, просто добавьте логическую проверку.
[HttpPost]
public ActionResult YourLoginMethod(loginModel model){
// get user
var user = db.ApplicationUsers.Where(a=>a.Key == model.Key).FirstOrDefault();
if(user!=null){
if(user.IsEmailVerified){
// if the email verified property is true call SignInAsync
var result = await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
// .. code redirect here
}else{
// tell the user that his email is not verified return to a view with error
return View();
}
}
// cant find user
return View();
}
Или, если вы хотите изменить SignInManager, вы можете на самом деле наследовать его и переопределить SignInAsyn c потому что SignInAsyn c является виртуальным, как упомянуто в документах .
public class CustomSignInManager:SignInManager{
public override Task SignInAsync(...){
// check for user email verified first with db context
if(emailIsVerified){
// call base class implementation
base.SignInAsync(...)
}
}
}