4

カスタム ロール プロバイダーを実装しようとしていますが、チュートリアルを見つけてそれに従いました。リンクは次のとおりです。 http://techbrij.com/custom-roleprovider-authorization-asp-net-mvc

存在しないユーザー アカウントでログインしようとしても、エラー メッセージは表示されません。これが私の現在のコードです。

ログイン用のコードは次のとおりです。

[HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                using (SampleDBEntities objContext = new SampleDBEntities())
                {
                    var objUser = objContext.Users.FirstOrDefault(x => x.AppUserName == model.UserName && x.Password == model.Password);
                    if (objUser == null)
                    {
                        ModelState.AddModelError("LogOnError", "The user name or password provided is incorrect.");
                    }
                    else
                    {
                        FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

                        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                           && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                        {
                            ModelState.AddModelError("LogOnError", "The user name or password provided is incorrect.");
                            return Redirect(returnUrl);
                        }
                        else
                        {
                            //Redirect to default page

                            //return RedirectToAction("RedirectToDefault");
                            return RedirectToAction("Index", "Home");
                        }
                    }
                }
            }
            // If we got this far, something failed, redisplay form
            return View(model);
        }

プロバイダーの実装のコードは次のとおりです。

public class MyRoleProvider : RoleProvider
    {
        public override void AddUsersToRoles(string[] usernames, string[] roleNames)
        {
            throw new NotImplementedException();
        }

        public override string ApplicationName
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public override void CreateRole(string roleName)
        {
            throw new NotImplementedException();
        }

        public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
        {
            throw new NotImplementedException();
        }

        public override string[] FindUsersInRole(string roleName, string usernameToMatch)
        {
            throw new NotImplementedException();
        }

        public override string[] GetAllRoles()
        {
            throw new NotImplementedException();
        }


        public override string[] GetRolesForUser(string username)
        {
            using (SampleDBEntities objContext = new SampleDBEntities())
            {
                var objUser = objContext.Users.FirstOrDefault(x => x.AppUserName == username);
                if (objUser == null)
                {
                    return null;
                }
                else
                {
                    string[] ret = objUser.Roles.Select(x => x.RoleName).ToArray();
                    return ret;
                }
            }
        }

        public override string[] GetUsersInRole(string roleName)
        {
            throw new NotImplementedException();
        }

        public override bool IsUserInRole(string username, string roleName)
        {
            throw new NotImplementedException();
        }

        public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
        {
            throw new NotImplementedException();
        }

        public override bool RoleExists(string roleName)
        {
            throw new NotImplementedException();
        }
    }
}

閣下/奥様、あなたの答えは大変役に立ちます。ありがとう++

4

1 に答える 1

7

ModelStateキーの下にエラーを追加しました"LogOnError"

ModelState.AddModelError("LogOnError", "The user name or password provided is incorrect.");

このエラーは、ビューに対応するヘルパーがある場合にのみ表示さHtml.ValidationMessageれます。

@Html.ValidationMessage("LogOnError")

ヘルパーにエラーを表示するHtml.ValidationSummary()場合は、空白のキーを使用します。

ModelState.AddModelError("", "The user name or password provided is incorrect.");
于 2013-01-27T17:25:45.050 に答える