2016-05-31 14 views
0

Ich versuche eine Python 3.5 Flask-Anwendung zu schreiben, die einen Benutzer zur Authentifizierung/Autorisierung an eine OAuth-URL umleitet. Als Teil dieser Umleitung muss ich den Header Authorization einschließen. Die integrierte Methode redirect() in Flask scheint das Hinzufügen von HTTP-Headern nicht zu unterstützen.Umleiten zu OAuth URL mit Kopfzeilen

Was ist der richtige Weg, dies in einer solchen Anwendung zu behandeln?

+0

Haben Sie versucht, https://pythonhosted.org/Flask-OAuth/ zu verwenden? – jonrsharpe

+0

@jonrsharpe Ich habe das nicht versucht, nein. Ich habe versucht, den rohen Prozess zu verstehen, aber vielleicht werde ich am Ende so etwas einbauen. Es besagt, dass es nur mit oAuth 1.0a kompatibel ist, und es gibt einige oAuth 2.0-Dienste. –

+0

Wenn Sie es selbst implementieren möchten, finden Sie hier ein OAuth 2-Beispiel für Flask: https://github.com/reddit/reddit/wiki/OAuth2-Python-Example. Es scheint jedoch keine Umleitung zu geben. – jonrsharpe

Antwort

1

Sie müssen ein eigenes Antwortobjekt erstellen, um Kopfzeilen hinzuzufügen. Sie können die Dokumentation hier ansehen: http://docs.python-requests.org/en/master/api/#requests.Response

Ein einfaches Beispiel für Ihren Anwendungsfall wäre so etwas wie:

response = Response(headers={'Authorization': 'whatever'}, 
        is_redirect=True, 
        url="https://your-redirected-url.com") 
return response 

Edit: Weitere Informationen

Außerdem würde ich https://github.com/lepture/flask-oauthlib überprüfen, ob Sie interessiert an einer Bibliothek. Es unterstützt oAuth1 und oAuth2 und ist relativ einfach mit einer Standard-Flask-App zu konfigurieren.

Edit: Eine andere Möglichkeit, es zu tun

Heute morgen habe ich einen einfacheren Weg, dies zu tun in Erinnerung hatte. Sie können die Redirect-Funktion aufrufen, und es wird ein Antwortobjekt zurückgegeben. Dann können Sie die Header für das neu erstellte Objekt festlegen.

response = redirect('https://url') 
response.headers = {'authorization': 'whatever'} 
return response 
+0

Danke, aber laut Python 3.5-Anfragen-Bibliothek ist die Response() -Klasse nicht aufrufbar. Daher kann ich es nicht instanziieren. Irgendwelche Gedanken? –

+0

Die obige Antwort verwendet Antwortklasse der Flasche. Ich werde mit einer zusätzlichen Lösung aktualisieren, die kein eigenes Response-Objekt erstellt. – pech0rin

+0

Die obige Antwort verwendet ein Addon-Modul, nicht die Reaktionsklasse der Flaschen. – bmjjr

Verwandte Themen