如何验证未经批准的用户asp.net MVC 3
在用户获得批准之前,我无法对其进行验证。代码如下: 公共无效登录(LoginViewModel模型) {如何验证未经批准的用户asp.net MVC 3,asp.net,asp.net-mvc-3,asp.net-membership,Asp.net,Asp.net Mvc 3,Asp.net Membership,在用户获得批准之前,我无法对其进行验证。代码如下: 公共无效登录(LoginViewModel模型) { if (Membership.ValidateUser(model.UserName, model.Password)) { if (Membership.GetUser(model.UserName).IsApproved) { FormsAuthentication.SetA
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");
}
}
问题是,即使用户名和密码正确,但用户尚未获得批准,它也会抛出第二个异常
我试图覆盖ValidateUser,但我不能调用它
有什么建议吗
编辑:控制器代码
[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");
}
我提到登录是一个局部视图
我试图覆盖ValidateUser,但我不能调用它
调用Membership.ValidateUser
时,将查找在web.config中注册的成员资格提供程序。因此,如果已配置自定义提供程序,则它将调用自定义ValidateUser方法:
<membership defaultProvider="MyProvider">
<providers>
<add name="MyProvider" type="MvcApplication1.MyValidation, MvcApplication1" />
</providers>
</membership>
此外,您不应该在这些情况下抛出异常,因为这些不是异常情况。使用异常仅处理异常情况。您应该将错误添加到ModelState。此外,控制器操作应返回
操作结果
而不是无效
。请查看帐户的登录
操作控制器
在启动新的MVC应用程序时默认为您创建。我不认为:抛出新异常(“您的电子邮件尚未验证。请检查您的电子邮件!”);是一个异常情况。所有此类异常都是我的控制器中的临时数据,我会显示一条错误消息。如果您有其他建议…那不是控制器。这是我在控制器中调用的服务类中的一个传统方法。此方法应返回true或false,或者如果您需要处理其他情况,则某些枚举然后将错误添加到控制器内的ModelState中。在这种情况下,我关于ActionResult返回类型的评论当然不成立。
<membership defaultProvider="MyProvider">
<providers>
<add name="MyProvider" type="MvcApplication1.MyValidation, MvcApplication1" />
</providers>
</membership>