ユーザーが承認される前にユーザーを検証することに問題があります。コードは次のとおりです。
public void Login(LoginViewModel モデル) {
if (Membership.ValidateUser(model.UserName, model.Password)) { if (Membership.GetUser(model.UserName).IsApproved) { FormsAuthentication.SetAuthCookie(model.UserName, model.KeepMeLoggedIn); } else { throw new Exception("Your email is not verified yet. Please check your email!"); } } else { throw new Exception("Username or Password doesn't match"); } }
問題は、ユーザー名とパスワードが適切であっても、ユーザーがまだ承認されていない場合でも、2 番目の例外がスローされることです。
ValidateUser をオーバーライドしようとしましたが、呼び出すことができません。
public class MyValidation : SqlMembershipProvider { public override bool ValidateUser(string username, string password) { MembershipUser user = GetUser(username, false); if (!user.IsApproved) { return true; } return base.ValidateUser(username, password); } }
助言がありますか?
編集:コントローラーコード
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Login(LoginViewModel model)
{
AccountService service = new AccountService();
if (ModelState.IsValid)
{
try
{
service.Login(model);
return RedirectToAction("Index", "Home");
}
catch (Exception e)
{
TempData["errorMessage"] = e.Message;
return RedirectToAction("Index", "Home");
}
}
return RedirectToAction("Index", "Home");
}
ログインは部分的なビューであることに言及します