2013-03-14 18 views
6
[Authorize] 
public class MyController : BaseController 
{ 
    [PermissionAuthorize] 
    public ActionResult GridData() 
    { 
     return Json(data, JsonRequestBehavior.AllowGet); 
    } 
} 

Posiadałem atrybut PermissionAuthoize dla uprawnień kontrolnych użytkownika na konkretną akcję. Mam problem Po wygaśnięciu sesji użytkownika lub biletu w tym czasie, jeśli użytkownik wyśle ​​ajax requrest do kontrolera, a następnie atrybut Authorize odrzuci żądanie i zwróci jako formularz logowania html do użytkownika. Ta aplikacja nie działa. to pokazuje zły wpływ na użytkownika.Jak przekierować nieautoryzowane żądanie Ajax na kontrolerze na stronę logowania? .

, więc chcę przekierować użytkownika do strony logowania, jeśli wyśle ​​zapytanie ajax po wygaśnięciu biletu.

Czy mogę utworzyć jeden inny atrybut autoryzacji dla kontrolera, czy to jest gud?

+0

Darin już Odpowiedź podana tutaj: http://stackoverflow.com/questions/5238854/handling-session-timeout-in-ajax-calls –

Odpowiedz

3

następujący kod może pomóc:

$.ajax({ 
    url: 'url',  
    statusCode: { 
     404: function() { 
      //page not found 
     }, 
     200: function() { 
      //ok, do your stuff 
     }, 
     302: function() { 
      //redirect - check if url contains login and do redirect    
     } 
    } 
}) 

Zasadniczo można sprawdzić tylko dla przekierowań i robić regularne rzeczy w success/error wywołania zwrotne, ale gdy pojawi się przekierowywać nagłówek HTTP zmienić window.location.href do żądanej strony logowania

5

Pierwszą rzeczą, którą musisz zrobić, to skonfigurować moduł uwierzytelniania formularzy, aby po przekierowaniu 401 przestał przekierowywać na stronę logowania. Phil Haack napisał nice article o tym, jak można to osiągnąć.

Po wykonaniu tej czynności można przechwycić 401 kodów statusu HTTP na kliencie. Więc można napisać global ajax handler które przekierowuje do strony logowania, gdy 401 kod stanu jest wysyłany z serwera (co się stanie, gdy wygaśnie biletu uwierzytelniania formularzy lub użytkownik nie jest uwierzytelniony w ogóle):

$(document).ajaxError(function(event, jqxhr, settings, exception) { 
    if (jqxhr.status == 401) { 
     // unauthorized 
     window.location.href = '/logon'; 
    } 
}); 
+1

Jego gud sposobem wykryć błąd ajax, ale w moim senerio używam źródła danych kendo ui w niektórych przypadkach jak upuszczanie danych i danych siatki. w ten sposób nie radzę sobie z błędem ajaxowym. – pargan

Powiązane problemy