Приведенный ниже код работает нормально для меня, и я могу подтвердить подлинность и все.
from flask import Flask, url_for, session
from flask import render_template, redirect
from authlib.integrations.flask_client import OAuth
app = Flask(__name__)
app.secret_key = 'secret_key'
app.config.from_object('config')
CONF_URL = 'https://accounts.google.com/.well-known/openid-configuration'
oauth = OAuth(app)
oauth.register(
name='google',
server_metadata_url=CONF_URL,
client_kwargs={
'scope': 'openid email profile https://www.googleapis.com/auth/analytics'
}
)
@app.route('/')
def homepage():
user = session.get('user')
return render_template('home.html', user=user)
@app.route('/login')
def login():
redirect_uri = url_for('auth', _external=True)
return oauth.google.authorize_redirect(redirect_uri)
@app.route('/auth')
def auth():
token = oauth.google.authorize_access_token()
user = oauth.google.parse_id_token(token)
session['user'] = user
return redirect('/')
@app.route('/logout')
def logout():
session.pop('user', None)
return redirect('/')
Теперь я хотел бы иметь возможность поговорить с API управления Google Analytics, но не совсем уверен, как действовать дальше. Вот несколько общих вопросов, на которые, как мне кажется, мне нужно знать ответ:
- Как (в маршруте аутентификации) сохранить токен и обновить sh токен в сеансе flask (чтобы я мог использовать их для создания учетных данных для API управления GA)
- Как проверить, прошел ли аутентификация пользователя перед выполнением ЛЮБОЙ функции в моем коде?
- Является ли приведенный ниже код фрагментом кода способ go для меня, чтобы достичь того, что я хочу? (работа с API управления GA)
def build_credentials():
oauth2_tokens = flask.session[AUTH_TOKEN_KEY] # how the get this into the session in the first place?
return google.oauth2.credentials.Credentials(
oauth2_tokens['access_token'],
refresh_token=oauth2_tokens['refresh_token'],
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
token_uri=ACCESS_TOKEN_URI)
def build_ga_api_v3():
credentials = build_credentials()
return googleapiclient.discovery.build('analytics', 'v3', credentials=credentials).management()
Спасибо!