我正在AWS EC2上运行Python Flask网站,因此我使用公共iPV4地址访问该网站。由于我没有S3访问权限,因此我仅使用一个特定的Google云端硬盘帐户来上载文件或从中检索文件。我已检索到OAuth2.0 client_secrets.json文件,并且正在使用这些凭据访问我的云端硬盘帐户。
我的问题是将PyDrive集成到Flask中。用户登录后(用户名存储在SESSION对象中),他们可以选择上传文件,我希望通过单击“提交”按钮将此文件上传到云端硬盘。>
IE:我需要有关将PyDrive集成到Flask中的自定义身份验证流程的帮助。
我研究了以下帖子: 1. Automating pydrive verification process:我的问题是,调用“ gauth.LocalWebserverAuth()”的行 2. https://github.com/gsuitedevs/PyDrive/issues/115:我了解到我需要一个“ settings.yaml”,但是“ AskUserToVisitLinkAndGiveCode(auth_url)”过程正在进行什么呢? 3. https://pythonhosted.org/PyDrive/oauth.html 4. Redirect to previous URL after OAuth login is completed (flask-dance):我没有sql数据库访问权限,因此我的Session存储在全局变量中
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
烧瓶应用程序
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云端硬盘的示例。 另外,当前重定向到身份验证url的方法绝对无法控制身份验证后的redirect_uri。它总是重定向到重定向uris的secret_clients.json列表中指定的第一个redirect_uri。