Flask中PyDrive的自定义身份验证流程

时间:2019-06-24 16:59:41

标签: google-drive-api pydrive

我正在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。

0 个答案:

没有答案