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