10

Setup (используя MVC 4)ASP.net MVC глобальный Авторизоваться фильтр форсирование входа на действие AllowAnonymous

public class MyAuthorizeAttribute : AuthorizeAttribute { 

    protected override bool AuthorizeCore(HttpContextBase httpContext) { 

     var isAuthorised = base.AuthorizeCore(httpContext); 

     if(isAuthorised) { 
      // retrieve authentication ticket from cookie and 
      // create custome principal and attach to 
      // httpContext.User 
     } 

     return isAuthorised; 
    } 
} 

Gloabl.asax.cs:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new MyAuthorizeAttribute()); 
} 

HomeController.cs:

using System.Web.Mvc; 

public class HomeController : Controller 
{ 
    [AllowAnonymous] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

Задача

Вызов главной страницы заставляет загружать страницу входа в систему.

Вопрос

Когда() действие HomeController.Index украшен [AllowAnonymous], почему ASP перенаправить меня к мнению входа?

Я использую this статью для справки

+0

Я только что проверил со встроенным авторизованным, и он отлично работает для меня. Возможно, вам придется проверить свой код авторизации. – VJAI

+0

Я пробовал со встроенным атрибутом Authorize, заменяя атрибут, добавляемый в глобальный фильтр в моем global.asax, но я все еще перенаправляюсь на страницу входа при вызове действия индекса на домашнем контроллере. Я что-то упускаю? Некоторые настройки в моей веб-конфигурации? У меня нет провайдера членства, поставщика ролей или поставщика профилей. Должен ли я? –

+0

Параметры проверки подлинности форм в файле web.config - это тот, который перенаправляется на страницу входа в систему. Но вам не нужны дополнительные настройки. Я попытался создать новый шаблон приложения/интернет-MVC 4, обозначающий Home Control с полномочиями Authorize и Index с помощью AllowAnonymous, и он работал должным образом. – VJAI

ответ

-1

Хоть это не ответ, но ..

Попробуйте с помощью встроенного в Authorize кода и убедитесь, что AllowAnonymous работает нормально. Я вижу в пользовательском авторизовать комментарии вы пытаетесь

получить билет аутентификации из печенья и создать логотий принципала и прикрепить к HttpContext.User

Я хотел бы предложить вам сделать этот процесс очень ранее в Application_AuthenticateRequest от Global.asax.cs, как указано в этом thread.

+0

в соответствии с моим комментарием выше, я попытался использовать AuthorizeAttribute, но все же перенаправляюсь на логин. Что дает? –

11

В соответствии с моим комментарием по оригинальному вопросу. Проблема была в представлении индекса, вызывала действия на других контроллерах, которые возвращали частичные представления. Просто случай прохождения всего и снятия старого атрибута [Авторизовать].

+4

Если это решило проблему, отметьте ее как ответ. Вы можете ответить на свои вопросы. –

+0

Отличная находка! Я ударился головой о стену на этом! Не могу понять, почему я «выйду из системы» и вернусь на домашнюю страницу, автоматически проведет меня через процесс регистрации снова. Спасибо! – Airn5475

2

У меня была аналогичная проблема, и в конце я использовал неправильный класс AllowAnonymousAttribute. Есть два класса AllowAnonymousAttribute:

  • один из System.Web.Httpnamespace
  • другой один из System.Web.Mvcnamespace

В вашем случае вы должны использовать, конечно, один из System.Web.Mvc :)

I «Я трачу больше часа на то, чтобы понять это в моей программе.

5

Хотя оригинальный плакат нашел причину в его случае, я хотел бы поделиться своей резолюцией, поскольку я столкнулся с этим вопросом, столкнувшись с теми же симптомами.

В моем Интернете.конфигурационный файл я, подчиняясь логике WebForms:

<authorization> 
    <deny users="?" /> 
</authorization> 

Вы не должны иметь это, как это будет препятствовать запрос от выполнения каких-либо действий, не входя в первую, для действия входа, к которому переназначение происходит, за исключением , Я только открыл это, когда попытался добавить второе публичное действие.

+0

Я сделал то же самое. Обнаружено, когда добавлено другое публичное действие. – Mitul

+0

Спасибо, что добавили это, просто помогли мне, через четыре года после публикации! –

Смежные вопросы