我只想让用户只有在激活他的帐户(电子邮件确认等)后才能访问某些站点区域。
我想让他登录,但如果他没有激活他的帐户(我有一个user.confirmed
财产),我想将他重定向到一个页面,提醒他确认他的帐户。
我怎样才能做到这一点?我不能if
在每个控制器方法中放置一个来检查它。
我只想让用户只有在激活他的帐户(电子邮件确认等)后才能访问某些站点区域。
我想让他登录,但如果他没有激活他的帐户(我有一个user.confirmed
财产),我想将他重定向到一个页面,提醒他确认他的帐户。
我怎样才能做到这一点?我不能if
在每个控制器方法中放置一个来检查它。
您可以编写自己的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()
{
...
}