这是我想用ASP.Net MVC 3实现的目标:
在用户积极使用我的网站之前,我希望他们填写表格并提供一些细节。除非他们这样做,否则他们会被重定向到表单网站。
我认为通过注册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!
}
答案 0 :(得分:1)
我认为最简单的解决方案是创建“待定”会员角色。首次创建帐户时,请将其分配给“待处理”角色。然后,您可以创建一个Action过滤器,将过滤角色中的所有用户重定向到您的表单。
编辑:
需要注意的一些问题:
答案 1 :(得分:0)
您必须自己跟踪这些信息。您可以按照建议创建自己的表,并将其链接到aspnet_users表或向aspnet_users表添加一列。