0

ユーザーが承認される前にユーザーを検証することに問題があります。コードは次のとおりです。

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");
    }

ログインは部分的なビューであることに言及します

4

1 に答える 1

0

ValidateUser をオーバーライドしようとしましたが、呼び出すことができません。

を呼び出すとMembership.ValidateUser、web.config に登録されているメンバーシップ プロバイダーが検索されます。したがって、カスタム プロバイダーを構成している場合は、カスタムの ValidateUser メソッドが呼び出されます。

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

また、これらのケースは例外的なケースではないため、例外をスローするべきではありません。例外的なケースのみを処理するには、exception を使用します。ModelState にエラーを追加する必要があります。また、コントローラーのアクションはActionResultsnotを返す必要がありvoidます。新しい MVC アプリケーションを起動すると、デフォルトで作成されるのLogOnアクションを見てください。AccountController

于 2012-09-20T09:28:54.790 に答える