如果需要条件,如何将用户重定向到特定页面

时间:2013-06-17 12:12:23

标签: c# entity-framework asp.net-mvc-4

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

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

我该怎么做?我无法在每个控制器方法中放置if来检查它。

1 个答案:

答案 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()
{
    ...
}