2016-07-19 45 views
2

Ich füge die Authentifizierung einem bestehenden Pyramidenprojekt hinzu. Die einfachste Form, die ich derzeit versuche (wird später erweitert) ist, dass alle Seiten HTTPForbidden auslösen. Die Ausnahmeansicht ist/login, die nach Anmeldedaten fragt und bei Erfolg HTTPFound mit request.referer als Speicherort zurückgibt.Wie man request.referer value von einer Weiterleitung nach einer fehlgeschlagenen Anmeldung hält

So weit so gut, das macht was ich will, was die Benutzer zurück auf die Seite bringt, auf die sie zugreifen wollten, wenn die Login-Seite sie unterbrach. Lassen Sie uns diese Seite anrufen.

Die Anmeldeseite ist ein einfaches HTML-Formular mit einem Absenden-Button.

Wenn jedoch der Benutzer Benutzername oder Passwort falsch eingibt, möchte ich auf die Anmeldeseite mit der Fehlermeldung "Falsches Passwort" oder ähnliches zurückkehren. Wenn dies geschieht, ist request.referer jetzt die Anmeldeseite statt Seite A.

Wie "speichere" ich Seite A (oder besser gesagt seine URL), so dass, wenn der Benutzer schließlich erfolgreich einloggen, sie sich finden zurück auf Seite A? Wird die Sitzung für solche Dinge verwendet, und gibt es Nicht-Session-Möglichkeiten, sie zu implementieren? Ich habe (noch) keine Sitzung für diese einfache Seite und versuche, das Hinzufügen verschiedener Komponenten in einem Durchgang zu vermeiden.

Antwort

3

Ich empfehle Ihnen, einen Parameter zu übergeben, wie login/?next=pageA.html

Wenn die Anmeldung fehlschlägt, Sie könnten dann uns auf Ihre Parameter next zu /login wieder, auch wenn die Referrer-Punkte jetzt /login.

Wenn sich der Benutzer dann erfolgreich anmeldet, können Sie umleiten, wenn die Nummer pageA.html in Ihrem next Parameter gespeichert wird.

Sie müssen in der Tat überprüfen, ob Ihr Parameter next ein gültiger ist, da jemand diesen Parameter kopieren, einfügen oder manipulieren könnte.

+1

Danke für die schnelle Antwort. Viel einfacher als ich erwartet hatte. Die einzige Unannehmlichkeit, die ich habe, ist, wie dies (mit _query) Benutzer sichtbar in der URL ist und würde daher zusätzliche Validierung benötigen (z. B. wenn jemand kopiert die URL aber nur unvollständig) –

+0

Ich habe die Antwort bearbeitet, um Ihre Bemerkung aufzunehmen. Wenn meine Antwort zu Ihnen passt, lasse ich sie als "akzeptiert" markieren;) – LiGhTx117

+1

Stellen Sie sicher, dass der übergebene Parameter * next * durch 'is_safe_url' überprüft wird. Andernfalls können Sie etwas wie javascript: alert ('xxx') weitergeben und dann diese potentielle XSS-Schwachstelle auf Ihrer Website öffnen. Schau dir Django für Inspiration an https://docs.djangoproject.com/en/1.9/_modules/django/utils/http/ –