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)
Session.pop löste das Problem. Aber jetzt hängt die App, wenn ich drei gleichzeitig für den Client öffne. – Rusty