пользовательский атрибут, который проверяет, активирован ли пользователь - PullRequest
1 голос
/ 11 августа 2011

Я ищу создание пользовательского атрибута, который проверяет, была ли активирована учетная запись пользователя. Мне нужно как-то получить имя пользователя текущего пользователя. Я использую 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 Ответ

2 голосов
/ 11 августа 2011

Я использовал следующий код для перенаправления пользователей, если они не аутентифицированы. Это делается путем переопределения метода «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...
}
...