2016-04-22 14 views
0

Ich erstelle eine einfache Flasche App für Google oauth2. Ich habe Probleme, wenn für verschiedene Benutzer die Sitzung zeigt, dass sie bereits registriert sind. Es ist völlig zufällig. Irgendwann geht der Benutzer in den oauth-Fluss, aber meistens gibt er den Text zurück, den ich gesetzt habe, sobald ich die Anmeldeinformationen bekomme, die "Thank you for registering :)" ist. Wo mache ich Fehler?Flask Sitzung aktualisiert nicht

import flask 
import logging 
from oauth2client import client 
from manage_auth import store_user_info, get_user_info 


app = flask.Flask(__name__) 
SCOPES = [ 
    'email', 
    'profile', 
    'https://www.googleapis.com/auth/calendar', 
    # Add other requested scopes. 
] 

CLIENT_SECRET = 'client_secret_web.json' 
APPLICATION_NAME = 'my_app_name' 

@app.route('/') 
def index(): 
    if 'credentials' not in flask.session: 
    return flask.redirect(flask.url_for('oauth2callback')) 
    credentials = client.OAuth2Credentials.from_json(flask.session['credentials']) 
    if credentials.access_token_expired: 
    return flask.redirect(flask.url_for('oauth2callback')) 
    else: 
     return "Thank you for registering :)" 


@app.route('/oauth2callback') 
def oauth2callback(): 
    flow = client.flow_from_clientsecrets(
     CLIENT_SECRET, 
     scope=' '.join(SCOPES), 
     redirect_uri=flask.url_for('oauth2callback', _external=True) 
    ) 

    if 'code' not in flask.request.args: 
    auth_uri = flow.step1_get_authorize_url() 
    return flask.redirect(auth_uri) 
    else: 
    #get auth code 
    auth_code = flask.request.args.get('code') 

    #get credentials 
    credentials = flow.step2_exchange(auth_code) 
    flask.session['credentials'] = credentials.to_json() 

    #get info and store credentials 
    user_info = get_user_info(credentials) 
    email_address = user_info.get('email') 
    flask.session['user_id'] = email_address 

    if credentials.refresh_token is not None: 
     store_user_info(email_address, user_info, credentials) 
    return flask.redirect(flask.url_for('index')) 


if __name__ == '__main__': 
    import uuid 
    app.secret_key = str(uuid.uuid4()) 
    app.debug = True 
    app.run(host='0.0.0.0', port=8889) 
+0

Session.pop löste das Problem. Aber jetzt hängt die App, wenn ich drei gleichzeitig für den Client öffne. – Rusty

Antwort

0

Versuchen Sie, die Sitzung bei jedem Abmelden aus dem Speicher zu holen.Hoffnung, das kann helfen!

+0

Meinst du ich sollte flask.session.pop ('credentials', None) vor der Dankesnachricht setzen? – Rusty

+0

Dies löste das Problem. Aber jetzt habe ich ein anderes Problem. Die App hängt, wenn ich drei vier Client gleichzeitig öffnen – Rusty

+0

Yah ich möchte die Sitzung pop. In der Zwischenzeit, was ist der neue Fehler, mit dem Sie konfrontiert werden? Kannst du mir mehr Einblicke wie Stack-Trace oder Log-Datei geben? –

Verwandte Themen