4 Stimmen

Erkennung von Authentifizierungs-Timeouts im Handler und Umleitung der gesamten Seite zur Login-Seite

Ich schreibe eine Anwendung, mit der jemand Absätze auf einer Webseite bearbeiten kann. jQuery wird verwendet, um die bearbeiteten Absatzdaten an einen Handler zu senden und zu empfangen, der sie speichert oder aus einer Datenbank liest. Das Problem ist, dass ich die Anmeldeseite von meinem Handler zurückbekomme, wenn die Formularauthentifizierung eine Zeitüberschreitung aufweist. Gibt es eine Möglichkeit, auf dem Client oder Server zu erkennen, ob die Authentifizierung abgelaufen ist, und die gesamte Seite auf die Anmeldeseite umzuleiten?

1voto

Ben Crouse Punkte 8210

In meiner Anwendung prüfe ich auf der Client-Seite den HTTP-Status der zurückgegebenen Seite. Wenn er 401(Unauthorized Error) lautet, zeige ich das Anmeldeformular in einem modalen Dialog an. Sie können sich auf diese Weise erneut authentifizieren oder einfach eine Umleitung mit

window.location = 'http://someurl.com';

Dies erfordert die Kooperation des Servers, um einen 401 zurückzugeben, aber dies scheint mir der sauberste Weg zu sein.

1voto

Peter J Punkte 56480

Ich habe vor kurzem eine Methode für den Umgang mit 401s entwickelt, die meiner Meinung nach auch für Sie funktionieren wird. Das Problem in früheren Versionen von .NET ist, dass Fehlerseiten nicht den richtigen Fehlercode zurückgeben, sondern nur 302 an die angegebene Seite.

Mit .NET 3.5 kann Ihr Fehlerhandler mit redirectMode "umschreiben" statt "umleiten":

<customErrors mode="On" defaultRedirect="/err.aspx" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="/404.aspx"/>
</customErrors>

Da alle Anfragen (einschließlich der Aufrufe von Webdiensten) jetzt den richtigen HTTP-Statuscode zurückgeben, können Sie den 404 / 401 / 500-Code in Ihrem Javascript korrekt verwenden.

Dann, in Ihrem Client-Code (dies ist in jQuery und ist Umleitung auf alle Fehler, nicht nur 401s, aber Sie bekommen die Idee):

$(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
  window.location.href('/error.aspx');
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X