3 Stimmen

Umleitung zurück zu einer Seite nach der Authentifizierung über OpenID, Oauth oder Facebook Connect

Ich erlaube es Benutzern, sich entweder mit OpenID, Twitter OAuth oder FBConnect auf meiner Website anzumelden. Wenn der Benutzer versucht, eine Seite aufzurufen, für die er angemeldet sein muss, möchte ich ihn nach der Anmeldung ZURÜCK auf diese Seite schicken. Gibt es eine einfache Möglichkeit, dies mit all diesen zu erreichen, oder sollte ich einfach nur die Umleitungsseite in ein Cookie schreiben und sie nach einer erfolgreichen Anmeldung an diese Seite senden? Ich bin mit Django so, wenn es irgendwelche netten Tipps oder Tricks, die speziell, die wäre großartig.

Vielen Dank für die Anregungen im Voraus!

2voto

keturn Punkte 4728

Sie könnten diesen Parameter (die Seite, auf der sie sich befanden) als Parameter für Ihre return_to . Wie bereits in die Spezifikation :

Hinweis: Die return_to URL KANN als Mechanismus verwendet werden, mit dem die Relying Party der Authentifizierungsantwort einen Kontext über die Authentifizierungsanfrage beifügen kann. Dieses Dokument definiert keinen Mechanismus, mit dem der RP sicherstellen kann, dass Abfrageparameter nicht von außen verändert werden; ein solcher Mechanismus kann vom RP selbst definiert werden.

Zum Beispiel:

def sendOpenIDCheck(...):
    # after getting an AuthRequest from Consumer.begin
    return_to = oidutil.appendArgs(return_to,
        {'destination_url': that_place_they_tried_to_go})
    return redirect(auth_request.redirectURL, realm, return_to))

def handleReturnTo(request):
   # after doing Consumer.complete and receiving a SuccessResponse:

   return redirect(request.GET['destination_url'])

Wenn es einen anderen Status gibt, den Sie verfolgen müssen (wie POST-Daten), oder wenn Sie eine außerordentlich lange URL haben, die Sie nicht als Abfrageparameter einfügen können, oder wenn Sie die destination_url Sie speichern diese Informationen serverseitig, senden den Schlüssel als Abfrageparameter anstelle einer URL und sehen ihn nach, wenn der Benutzer zurückkommt.

Das unterscheidet sich nicht sehr von der Speicherung in der Sitzung, es sei denn, der Benutzer hat mehrere gleichzeitige Registerkarten in einer Sitzung, die in diese hineinlaufen, und dann hilft es, sie in der Abfrage zu haben.

1voto

Marcel Jackwerth Punkte 51964

Leider sind OAuth und OpenID nicht wirklich über den Status Ihrer Anwendung informiert (während OAuth WRAP dies sein kann). Sie müssen also von der folgenden Annahme ausgehen:

  • Der Benutzer schließt die Anmeldung ab, OHNE die Registerkarten/Fenster zu wechseln oder andere Anfragen auf Ihrer Website zu stellen.

Dann können Sie wie folgt vorgehen:

  1. Sobald Sie den Zugriff auf eine geschützte Seite feststellen, speichern Sie die vollständige Abfrage in der Sitzung. Dies funktioniert nicht, wenn es sich um eine POST-Anfrage handelt. Sie müssen sich auf dieses Problem vorbereiten (zeigen Sie dem Benutzer eine Warnseite mit dem Hinweis, dass er sich zuerst anmelden muss).
  2. Speichert einen Zeitstempel, wann diese Anfrage stattgefunden hat.
  3. Prüfen Sie bei Ihrem OpenID-Callback, ob die Sitzungsvariablen gesetzt sind, und leiten Sie den Benutzer an die gespeicherte Abfrage weiter. Prüfen Sie den Zeitstempel (leiten Sie nicht um, wenn der Zeitstempel älter als etwa 5 Minuten ist). Danach löschen Sie beide Variablen aus der Sitzung.

Dies wird zu einem merkwürdigen Verhalten führen, wenn der Benutzer gegen die Annahme verstößt, aber ich glaube nicht, dass es eine Möglichkeit gibt, dies zu umgehen.

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