2016-07-19 10 views
0

Ich habe eine MVC 4.0-Website mit Formularauthentifizierung und versuche, Authentifizierung Timeout zu behandeln. Insbesondere muss ich ajax Anfragen nach einem Timeout anders als reguläre Anfragen anders behandeln, da das Forms Authentication System von MVC ein 302 Found (Redirect) auf die Login-Seite als Antwort auf die ajax Anfrage sendet ... endet dies mit dem Ajax Anruf einen 200 Success HttpStatusCode erhalten, wenn das ist offensichtlich nicht das, was ich senden möchte!Behandeln Sie nicht authentifizierte AJAX-Anforderungen in MVC-Formularauthentifizierung

Wie kann ich die nicht authentifizierten Anfragen ajax behandeln?

Die Erweiterung AuthorizeAttribute ist natürlich nicht die Antwort, da die Autorisierung erst nach der Authentifizierung erfolgt. HandleUnauthorizedRequest wird nie in dieser Situation (as opposed to the different answers in the question)
Ich kann jede Anfrage in der global.asax abfangen und überprüfen Sie es dort ... aber das scheint wie der falsche Weg, um darüber zu gehen.

Authorization in meinem web.config ist wie so gesetzt:

<authentication mode="Forms"> 
    <forms loginUrl="Login" 
     protection="All" 
     timeout="60" 
     name=".ASPXAUTH" 
     path="/" 
     requireSSL="false" 
     slidingExpiration="true" 
     defaultUrl="Main" 
     cookieless="UseDeviceProfile" 
     enableCrossAppRedirects="false" /> 
</authentication> 

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

<sessionState mode="InProc" timeout="60"></sessionState> 
+0

Könnten Sie vielleicht einen httpHandler oder HttpModule verwenden, um diese spezifische Anfrage zu bearbeiten? – mahlatse

+0

@mahlatse Ich bin mir nicht sicher, was du meinst ... MVC Routing und Controller nicht verwenden? –

+0

überprüfen Sie diesen Beitrag, http://StackOverflow.com/Questions/15798828/httpmodule-only-on-specific-MVC-Route, bitte überprüfen Sie die Antwort von Stockbreak – mahlatse

Antwort

0

Also, was landete ich tat so dass alle Benutzer in der web.config:

<authorization> 
    <allow users="*" /> 
</authorization> 

und dann bei der Prüfung mein eigener Code, ob der Benutzer authentifiziert ist ...
Es muss doch einen besseren Weg geben, nein?

+0

Wenn Sie diese Route herunterfahren, dann setzen Sie das [Authorize] -Attribut auf einem Basis-Controller (wenn Sie die gleiche Funktionalität auf verschiedenen Controllern benötigen und den onActionExecuting-Filter auf dem Controller überschreiben, behandeln Sie Ihre Ajax-Anfrage-Autorisierung dort. – mahlatse

+0

Ich habe ein '[Authorize]' - Attribut auf einem Basis-Controller. Das Problem ist, dass, wenn ich 'user =" * "erlauben, nicht authentifizierte Anfragen, die nicht auf der Anmeldeseite sind meine Filter nicht erreichen. –

+0

Dann sind HttpModules der Weg zu gehen, überprüfen Sie die MS-Website, wie Sie sie verwenden, oder sogar hier auf Stack-Überlauf – mahlatse

Verwandte Themen