ASP.NetMVC3で達成したいことは次のとおりです。
ユーザーが私のウェブサイトを積極的に使用する前に、フォームに記入していくつかの詳細を提供してもらいたいと思います。そうしない限り、フォームのWebサイトにリダイレクトされます。
IsApproved-flagをfalseに設定してアカウントを登録することでこれは可能だと思いましたが、実際にはそのようなユーザーはまったくログインできません(Membership.ValidateUser(model.UserName, model.Password)
常にfalseを返します)。
このシナリオをサポートするフォーム認証のメカニズムはありますか?または、カスタムデータベーステーブルでこれを追跡する必要がありますか?
前もって感謝します!
編集:MystereMan(最初に彼の返信を読んでください)とSOに関する他のいくつかの素晴らしい投稿に感謝します、ここにActionFilter(属性とその使用法)があります:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class RedirectUserInRoleAttribute : ActionFilterAttribute
{
public string RoleName { get; set; }
public string TargetControllerName { get; set; }
public string TargetActionName { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
MembershipUser user = Membership.GetUser();
if (user != null)
{
string[] roles = Roles.GetRolesForUser(user.UserName);
if (roles.Any(x => x == RoleName))
{
RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("action", TargetActionName);
redirectTargetDictionary.Add("controller", TargetControllerName);
filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
}
}
}
}
[Authorize]
[RedirectUserInRole(RoleName = "Pending", TargetControllerName = "Home", TargetActionName = "Index")]
public ActionResult ChangePassword()
{
//...
}
[Authorize]
[RedirectUserInRole(RoleName = "Member", TargetControllerName = "Home", TargetActionName = "Index")]
public ActionResult Confirm()
{
// show confirm form here!
}