0

我只想让用户只有在激活他的帐户(电子邮件确认等)后才能访问某些站点区域。

我想让他登录,但如果他没有激活他的帐户(我有一个user.confirmed财产),我想将他重定向到一个页面,提醒他确认他的帐户。

我怎样才能做到这一点?我不能if在每个控制器方法中放置一个来检查它。

4

1 回答 1

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()
{
    ...
}
于 2013-06-17T12:15:49.087 回答