2016-04-10 10 views
1

Ich bin den folgenden Code für die Authentifizierung unter Verwendung unter Verwendung von oauth 2,0Ungültiger Anforderungszustand: OAuth2 Kolben

oauth2.init_app(
    app, 
    scopes=['email', 'profile'], 
    authorize_callback=_request_user_info) 

Die Route ist wie folgt:

@app.route('/') 
@oauth2.required 
def hello(): 
    """Return a friendly HTTP greeting.""" 
    return 'Hello ' + session['profile']['displayName'] 

der AUTH -Rückrufmethode

def _request_user_info(credentials): 
    """ 
    Makes an HTTP request to the Google+ API to retrieve the user's basic 
    profile information, including full name and photo, and stores it in the 
    Flask session. 
    """ 
    http = httplib2.Http() 
    credentials.authorize(http) 
    resp, content = http.request(
     'https://www.googleapis.com/plus/v1/people/me') 

    if resp.status != 200: 
     current_app.logger.error(
      "Error while obtaining user profile: %s" % resp) 
     return None 

    session['profile'] = json.loads(content) 

Ich kann den Zustimmungsbildschirm sehen und danach gibt es zu viele Umleitungen. Die Protokolle zeigen Folgendes.

NFO:werkzeug:127.0.0.1 - - [10/Apr/2016 15:25:21] "GET/HTTP/1.1" 302 - 
INFO:werkzeug:127.0.0.1 - - [10/Apr/2016 15:25:21] "GET /oauth2authorize?scopes=profile&scopes=email&return_url=http%3A%2F%2F127.0.0.1%3A8080%2F HTTP/1.1" 302 - 
INFO:oauth2client.client:Successfully retrieved access token 
INFO:werkzeug:127.0.0.1 - - [10/Apr/2016 15:25:27] "GET /oauth2callback?state=%7B%22csrf_token%22:+%22aa7d28d2496c0e0714eac20b902c1e4db21677d333a837d743525a9696d6c976%22,+%22return_url%22:+%22http://127.0.0.1:8080/%22%7D&code=4/Kz1xkENjHrTzLphfEG8CGND7tkeGXxjIffZxMwSr_hU HTTP/1.1" 302 - 
INFO:werkzeug:127.0.0.1 - - [10/Apr/2016 15:25:27] "GET/HTTP/1.1" 302 - 
INFO:werkzeug:127.0.0.1 - - [10/Apr/2016 15:25:27] "GET /oauth2authorize?scopes=profile&scopes=email&return_url=http%3A%2F%2F127.0.0.1%3A8080%2F HTTP/1.1" 302 - 
INFO:oauth2client.client:Received token response with no refresh_token. Consider reauthenticating with approval_prompt='force'. 
INFO:oauth2client.client:Successfully retrieved access token 
INFO:werkzeug:127.0.0.1 - - [10/Apr/2016 15:25:28] "GET /oauth2callback?state=%7B%22csrf_token%22:+%22862efe9c1803e12c5c1323b5f68d8bbf185ba89d5d46268924ac527d3dca886c%22,+%22return_url%22:+%22http://127.0.0.1:8080/%22%7D&code=4/nU8o3y3zslgd9KVXJ_NDtzJUZfABeF6ka4IbYSiGKcs HTTP/1.1" 302 - 
INFO:werkzeug:127.0.0.1 - - [10/Apr/2016 15:25:28] "GET/HTTP/1.1" 302 - 

Schließlich sehe ich eine Seite mit den Worten. Ungültige Anforderung Zustand

enter image description here

Antwort

1

Dies kann passieren, wenn die Cookie-Sitzung zu groß wird und die neuen CSRF-Token können nicht auf die Sitzung gespeichert werden. Können Sie die Cookie-Größen in Ihren Antworten überprüfen?

Wir haben einen Teil dieses Problems mit oauth2client 2.0.2 behoben, aber wenn Sie es noch mit dieser Version erleben, würde ich gerne weitere Informationen erhalten.

Wir empfehlen dringend, eine datenbankgestützte Sitzung wie Memcache/Redis anstelle von Cookies zu verwenden.

+0

Wie würde man ein Datenbank-Backend mit 'oauth2client' benutzen? Ist es möglich, stattdessen eine einfache Datei oder etwas anderes zu verwenden? – vidstige