Authlib Flask - Работа с API управления Google Analytics - PullRequest
0 голосов
/ 10 марта 2020

Приведенный ниже код работает нормально для меня, и я могу подтвердить подлинность и все.

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, но не совсем уверен, как действовать дальше. Вот несколько общих вопросов, на которые, как мне кажется, мне нужно знать ответ:

  1. Как (в маршруте аутентификации) сохранить токен и обновить sh токен в сеансе flask (чтобы я мог использовать их для создания учетных данных для API управления GA)
  2. Как проверить, прошел ли аутентификация пользователя перед выполнением ЛЮБОЙ функции в моем коде?
  3. Является ли приведенный ниже код фрагментом кода способ 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()

Спасибо!

...