0

在用户获得批准之前验证用户时遇到问题。这是代码:

公共无效登录(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");
        }
    }

问题是即使用户名和密码都很好,但用户还没有被批准,它会抛出第二个异常。

我试图覆盖 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");
    }

我提到登录是部分视图

4

1 回答 1

0

我试图覆盖 ValidateUser,但我不能调用它。

当您调用时,Membership.ValidateUser这将查找在您的 web.config 中注册的成员资格提供程序。因此,如果您已经配置了自定义提供程序,那么它将调用您的自定义 ValidateUser 方法:

<membership defaultProvider="MyProvider">
    <providers>
        <add name="MyProvider" type="MvcApplication1.MyValidation, MvcApplication1" />
    </providers>
</membership>

此外,您不应该在这些情况下抛出异常,因为这些不是异常情况。使用异常仅处理异常情况。您应该在 ModelState 中添加错误。控制器动作也不应该ActionResults返回void。当您启动一个新的 MVC 应用程序时,请查看默认为您创建的LogOn操作。AccountController

于 2012-09-20T09:28:54.790 回答