10

Setup (przy użyciu MVC 4)ASP.net MVC filtr globalny autoryzacji zmuszając logowanie na działanie 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(); 
    } 
} 

Problem

Połączenie ze stroną główną zmusza do załadowania strony logowania.

Pytanie

Kiedy() działanie HomeController.Index jest ozdobiony [AllowAnonymous], dlaczego ASP przekierować mnie do widoku logowania?

Używam this artykuł odsyłające

+0

Właśnie sprawdziłem z wbudowanym Autoryzuj i działa dobrze dla mnie. Być może musisz sprawdzić swój niestandardowy kod autoryzacyjny. – VJAI

+0

Próbowałem już z wbudowanym atrybutem Authorize, zastępując atrybut dodawany do filtru globalnego w moim pliku global.asax, ale nadal jestem przekierowywany do strony logowania podczas wywoływania akcji indeksu na kontrolerze domowym. Czy czegoś brakuje? Jakieś ustawienie w mojej konfiguracji sieci? Nie mam skonfigurowanego dostawcy członkostwa, dostawcy roli ani dostawcy profilu. Powinienem mieć? –

+0

Ustawienia uwierzytelniania formularzy w pliku web.config są tymi, które przekierowują do strony logowania. Ale nie potrzebujesz dodatkowych ustawień. Próbowałem, tworząc nowy szablon aplikacji/Internetu MVC 4 oznaczający kontroler Home z akcją Authorize and Index z AllowAnonymous i działał zgodnie z oczekiwaniami. – VJAI

Odpowiedz

-1

choć nie odpowiedź, ale ..

Spróbuj z wbudowanego w kodzie Authorize i upewnij AllowAnonymous pracuje bez zarzutu. Widzę w swoim zwyczaju zezwolić komentarzy próbujesz

pobrać bilet uwierzytelniania z cookies i stworzyć logo klienta kapitał i dołączyć do httpContext.User

Proponuję zrobić ten proces bardzo wcześniej w Application_AuthenticateRequest z Global.asax.cs zgodnie z tym thread.

+0

jak na mój komentarz powyżej, próbowałem przy użyciu AuthorizeAttribute, ale nadal przekierowanie do logowania. Co daje? –

11

Zgodnie z moim komentarzem do pierwotnego pytania. Problem polegał na tym, że widok indeksu wywoływał akcje na innych kontrolerach, które zwracały częściowe widoki. To tylko kwestia przejrzenia wszystkiego i pozbycia się starego atrybutu [Authorize].

+4

Jeśli to rozwiązało problem, oznacz go jako odpowiedź. Możesz odpowiadać na własne pytania. –

+0

Świetne znalezisko! W tym momencie waliłem głową w ścianę! Nie mogłem się domyślić, dlaczego "wylogowałem się", a powrót do mojej strony głównej automatycznie przeprowadzi mnie ponownie przez proces logowania. Dziękuję Ci! – Airn5475

2

Miałem podobny problem iw końcu użyłem niewłaściwej klasy AllowAnonymousAttribute. Istnieją dwie klasy AllowAnonymousAttribute:

w twoim przypadku trzeba użyć oczywiście jedną z System.Web.Mvc :)

I Spędziłem ponad godzinę, aby znaleźć to w moim programie:

5

Mimo że oryginalny plakat znalazł przyczynę w jego przypadku, chciałbym podzielić się moją rezolucją, ponieważ natknąłem się na to pytanie, gdy mam do czynienia z tymi samymi objawami.

W mojej sieci.Plik konfiguracyjny miałem, przestrzegając logikę webforms:

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

nie musi mieć to, co pozwoli uniknąć żądania od wykonywania jakichkolwiek działań bez logowania się pierwszy, z wyjątkiem działań logowania do którego przekierowanie odbywa . Odkryłem to dopiero, gdy próbowałem dodać drugą akcję publiczną.

+0

Zrobiłem to samo. Odkryty po dodaniu kolejnej akcji publicznej. – Mitul

+0

Dzięki za dodanie tego, pomogłeś mi, cztery lata po opublikowaniu! –

Powiązane problemy