检查用户是否已激活的自定义属性

时间:2011-08-11 16:28:13

标签: c# asp.net-mvc authorization

我正在寻找创建一个自定义属性来检查用户的帐户是否已被激活。我需要以某种方式获取当前用户的用户名。我正在使用FormsAuthentication.SetAuthCookie()登录用户。

在任何控制器方法上,如果未经授权,我想重定向到特定路由。这可以这样做吗?这就是我的开始。

public class ActivatedAuthroizeAttribute : System.Web.Mvc.AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
    {
        // Check to see if user is authorized. 
        DefaultUnitOfWork unitOfWork = new DefaultUnitOfWork();
        //User user = UnitOfWork.UserRepository.IsUserActivated(FormsAuthentication.GetAuthCookie(.Value["Username"]);

        base.HandleUnauthorizedRequest(filterContext);
    }

1 个答案:

答案 0 :(得分:2)

如果用户未经过身份验证,我已使用以下代码重定向用户。这是通过重写“OnActionExecuting”方法来更改控制器和操作(如果未经过身份验证)。此示例显示重定向到默认的mvc登录页面/ Account / LogOn。

public class RequiresAuthenticationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    //You can put your check here. This particular
    //check is for default asp.net membership authentication

    if(!filterContext.HttpContext.User.Identity.IsAuthenticated)
    {
        RedirectToLogin(filterContext);
    }
}

private void RedirectToLogin(ActionExecutingContext filterContext)
{
    var redirectTarget = new RouteValueDictionary
    {
        {"action", "LogOn"},
        {"controller", "Account"}
    };

    filterContext.Result = new RedirectToRouteResult(redirectTarget);
    }
}

编辑:显然,然后将此属性放在控制器类的顶部,但你知道......:)

[RequiresAuthentication]
public class HomeController : Controller
{
    // code...
}