Как проверить, авторизован ли пользователь внутри Action - PullRequest
24 голосов
/ 05 февраля 2010

Обычно я защищаю свои Действия с помощью [Authorize], но на этот раз мне нужно проверить, авторизован ли пользователь внутри действия.

Например

if(userIsAuthorized) {
    //do stuff
}
else {
    //return to login page
}

Я полагаю Я использую 'Аутентификация по формам'

Этот вопрос отчасти похож на на , но ни один из приведенных ответов не сработал.

РЕДАКТИРОВАТЬ: я сделал еще несколько копаний - кажется, если я остановился на точке действия для действия, которое имеет [Authorize], User.Identity установлен, но на действиях без него User.Identity пуст, даже если я вошли в систему

Ответы [ 4 ]

44 голосов
/ 05 февраля 2010

Если вы просто хотите узнать, вошел ли пользователь в систему:

if (User.Identity.IsAuthenticated) { ... }

Если вы пытаетесь сделать что-то для конкретной роли:

if (User.IsInRole("Administrators")) { ... }

Экземпляр User является открытым свойством класса Controller, поэтому у вас всегда есть доступ к нему из написанного вами контроллера. Если ни один пользователь не вошел в систему, вы должны иметь GenericPrincipal для User и GenericIdentity для User.Identity, поэтому не беспокойтесь о проверке на нулевые значения.

5 голосов
/ 05 февраля 2010

Request.IsAuthenticated должно работать на то, что вы пытаетесь сделать.

1 голос
/ 06 апреля 2017

Создайте атрибут, подобный этому: OnActionExecuting будет выполняться первым, прежде чем другой код из действия

     public class IsAuthenticatedAttribute : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
               //do your validations here. and redirect to somewhere if needed. 
                filterContext.HttpContext.Response.Redirect("/") //this will send user to home.
            }
        }

на каждое действие, где вам нужно проверить, добавьте атрибут следующим образом:

[IsAuthenticatedAttribute]
public ActionResult ActionName(parameters?)
{
     // no need to worry about checking here.
    //do you action things
}

EDIT: Этот еще завершает действие, а затем только перенаправить его. Не так много полезного.

1 голос
/ 05 февраля 2010

Я предлагаю сначала выяснить, какой тип авторизации вы используете. ;)

Ваш ответ правильный. Из того, что я помню, ковыряться в атрибуте [Authorize] и связанном коде ActionFilter, MVC внутренне вызывает Page.User.Identity.IsAuthenticated, так же как и эти примеры кода.

...