2011-08-11 132 views
1

我正在创建一个自定义属性,用于检查用户的帐户是否已被激活。我需要以某种方式获取当前用户的用户名。我正在使用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); 
    } 

回答

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... 
} 
相关问题