Logout mit http-basic-authentication und restful_authentication-plugin
Habe ich das restful_authentication-plugin installiert in eine rails-app, mit sessions_controller, hat eine destroy-Methode wie diese:
def destroy
self.current_user.forget_me if logged_in?
cookies.delete :auth_token
reset_session
flash[:notice] = "You have been logged out."
redirect_back_or_default('/')
end
In der Anwendung-controller ich habe:
before_filter :login_required
Und In der sessions_controller ich habe:
skip_before_filter :login_required
Mein problem ist, dass wenn ein Benutzer die Authentifizierung mit http basic authentication, die er/Sie nicht angemeldet ist. die session zerstört wird, aber der Benutzer ist in der Lage, navigieren zu eingeschränkten Seiten mit kein problem. Dieses problem tritt nicht mit session-Authentifizierung durch das plugin. Wie kann ich diese Methode loszuwerden, die grundlegende authenication?
Sitzungen sind nicht Erholsam.
InformationsquelleAutor Chris Drappier | 2009-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nichts getan werden kann, server-Seite auf "Abmelden", die ein Benutzer in dieser situation. Wenn der Benutzer sich durch basic-Authentifizierung, die der browser speichert den Authentifizierungs-Daten, und sendet den authentication Parameter, die über den http-Header mit jeder Anfrage. wenn sich die Benutzer mit basic-auth, er/Sie wird seine/Ihre browser-Fenster auf "Abmelden".
Snekse Vorschlag aus dem anderen, SO Frage war für mich, wie gut.
InformationsquelleAutor Chris Drappier
Ich gefunden habe, eine durchaus interessante Art und Weise, dies zu überwinden, indem eine session variable zu merken, welcher Benutzer abgemeldet hat. Die Idee ist, dass, obwohl der browser ist immer noch sendet Authentifizierungs-Daten, wir sind nur zu ignorieren, weil der user wählte, um sich abzumelden. Immer wenn eine neue login-Anfrage an den browser gesendet wird, werden alle Authentifizierungs-Daten gelöscht, so dass der Benutzer in der Lage ist, melden Sie sich wieder, in jeder Zeit.
Dann auf der controller-events, die ich tun:
Und endlich meine session controller sieht wie folgt aus:
Und vergessen Sie nicht, Ihre Routen!
InformationsquelleAutor Mihai Alexandru Bîrsan
Funktioniert dies nur für den IE 6 SP1+:
http://msdn.microsoft.com/en-us/library/ms536979(VS.85).aspx
Beachten Sie, dass hiermit löschen Sie den cache für alle Websites, die der Benutzer gerade eingeloggt ist (innerhalb der gleichen IE-Instanz).
InformationsquelleAutor Andrew Livesay
Hmm, es klingt wie der client-browser ist nur das Zwischenspeichern der HTTP-Basic-Auth-credentials und re-senden Sie jedes mal. In dem Fall haben Sie keine Kontrolle hat. Die Aktionen, die Sie wollen geschützt werden, geschützt werden müssen mit der richtigen before_filter für die restful_authentication-plugin, das sollte
Also in Ihrem controller, den Sie hätte
HTTP-Authentifizierung ist zustandslos, das heißt, die server keine Spur von einem authentifizierten "Sitzung" - so der AUFTRAGGEBER hat es jedes mal (daher die häufige checkbox "speichern Sie diese Anmeldeinformationen'), es gibt also keine Möglichkeit für den server zu deaktivieren Sie die client-Anmeldeinformationen. Dies ist Teil der Spezifikation. Siehe den Wikipedia-Eintrag
http://en.wikipedia.org/wiki/Basic_access_authentication
Insbesondere, Blick auf die "Nachteile" Abschnitt.
InformationsquelleAutor Cody Caughlan
Ich gerade aktualisiert login_from_basic_auth in authenticated_sytem zu Lesen:
InformationsquelleAutor user83682
Einen Weg, um dies zu beheben, deaktivieren Sie die "basic http authentication" völlig
Aber brauchen wir für eine gute user-experience während der Ajax-Aktionen, so aktivieren wir diese Authentifizierung nur für ajax-Aktionen
InformationsquelleAutor Satya
Ich weiß, bisschen nach party, aber Wenn Sie wollen, Abmeldung Sie können render-401.
also logout-Methode könnte wie folgt aussieht:
Ihrem erholsamen Aktion könnte wie folgt aussieht:
- und browser-zu erhöhen wird die http-basic-Authentifizierung wieder
InformationsquelleAutor Richard