我想让用户只有在激活帐户(电子邮件确认等)时才能访问某些网站区域。
我想允许他登录,但如果他没有激活他的帐户(我有一个user.confirmed
属性)我想将他重定向到一个页面,提醒他确认他的帐户。
我该怎么做?我无法在每个控制器方法中放置if
来检查它。
答案 0 :(得分:5)
您可以编写自己的AuthorizeAttribute并从那里重定向用户,这意味着它就像装饰您的行为一样简单,即
public class ConfirmedUsersOnly: AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var loggedInUser = // pull user from storage
return httpContext.User.Identity.IsAuthenticated && loggedInUser.confirmed;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAuthenticated)
{
// handle normal unauthorized redirect (e.g. login page)
base.HandleUnauthorizedRequest(filterContext);
}
else
{
// redirect users who are logged in but not confirmed
filterContext.HttpContext.Response.Redirect("NotConfirmedUrl");
}
}
}
<强>用法强>
[ConfirmedUsersOnly]
public ActionResult ConfirmedAccountAction()
{
...
}