Я использую сайт 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.