Пользовательский поток аутентификации для PyDrive во Flask - PullRequest
0 голосов
/ 24 июня 2019

Я использую сайт Python Flask на AWS EC2, поэтому я захожу на сайт, используя публичный адрес iPV4.Поскольку у меня нет доступа к S3, я использую только одну конкретную учетную запись Google Drive для загрузки и получения файлов в / из.Я получил файл OAuth2.0 client_secrets.json и получаю доступ к своей учетной записи Drive с этими учетными данными.

Моя проблема заключается в интеграции PyDrive с Flask.После того, как пользователь вошел в систему (где имя пользователя хранится в объекте SESSION), у него есть возможность загрузить файл, и я хочу, чтобы этот файл - одним нажатием кнопки отправки - был загружен на диск.

IE: мне нужна помощь с настраиваемым процессом аутентификации, интегрирующим PyDrive в Flask.

Я просмотрел следующие сообщения: 1. Автоматизация процесса проверки pydrive : Моя проблема сэто строка, вызывающая "gauth.LocalWebserverAuth ()" 2. https://github.com/gsuitedevs/PyDrive/issues/115: Я понимаю, что мне нужен "settings.yaml", но что происходит в этом процессе "AskUserToVisitLinkAndGiveCode (auth_url)"?3. https://pythonhosted.org/PyDrive/oauth.html 4. Перенаправление на предыдущий URL после завершения входа в OAuth (flask-dance) : У меня нет доступа к базе данных sql, поэтому мой сеанс хранится в глобальной переменной

Пользовательский поток аутентификации PyDrive

# here is the PyDrive code I'm trying to work with
gauth = GoogleAuth()
auth_url = gauth.GetAuthUrl() # Create authentication url user needs to visit
code = AskUserToVisitLinkAndGiveCode(auth_url) # Your customized authentication flow (HERE)*** 
gauth.Auth(code) # Authorize and build service from the code

Приложение Flask

gauth = GoogleAuth()
auth_url = gauth.GetAuthUrl()
drive = GoogleDrive(gauth)

@app.route('/hello/', methods=["GET", "POST"])
@login_required # (HERE)***
def hello():
##    I want this method called to actually upload the file
##    sitting at the /dashboard, but for simplification say
##    I just want to do back to my site at a page that prints "hello
    return ("hello")

@app.route('/dashboard', methods=["GET", "POST"])
@login_required
def dashboard():
    if request.method == "POST":
        if request.form['submit_button'] == "ice":
            return redirect(auth_url)
    else:
        return render_template("dashboard.html")

settings.yaml - чтобы не приходилось каждый раз входить в систему (credentials.json в настоящее время для меня пуст)

client_config_backend: settings
client_config:
  client_id: xxxxxxxxxxxxxxx
  client_secret: xxxxxxxxxxxxxxx

save_credentials: True
save_credentials_backend: file
save_credentials_file: credentials.json

get_refresh_token: True

oauth_scope:
  - https://www.googleapis.com/auth/drive

Мои URI перенаправления: 1. http://x.xx.xxx.xxx:xxxx/hello/ 2. http://x.xx.xxx.xxx:xxxx/dashboard/

Вход в систему перенаправляет на страницу авторизации, чтобы избавить меня от проблем с копированием.вставить его из моего терминала EC2.Вот мои проблемы: после того, как я дал доступ и был перенаправлен в / hello /, сессия забыта и вынуждает меня снова войти в систему. Я предполагаю, что это означает, что вход в Google также забыт, и я никуда не попал.

Как связать Flask и PyDrive для создания успешного пользовательского потока аутентификации?Был бы признателен пример, показывающий, как получить файл для выгрузки с / dashboard /, а затем перенаправить обратно на / dashboard / без необходимости входа ни в мое приложение Flask, ни обратно в Google Drive.Кроме того, текущий способ перенаправления на URL-адрес аутентификации не дает мне абсолютно никакого контроля над тем, каким будет redirect_uri после аутентификации.Он всегда перенаправляет на первый redirect_uri, указанный в списке secret_clients.json для перенаправления uris.

...