gpt4 book ai didi

python - 如何使用 Authlib 和 Gspread 刷新身份验证 token ?

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:08 25 4
gpt4 key购买 nike

我在 python 应用程序中使用 gspread 来访问一些充当应用程序数据库的后端 Google 表格。用户需要使用应用程序内浏览器登录应用程序,并使用通过此方法在 url 中返回的 token 创建 authlib OAuth2 session 。初始登录和访问工作正常,但是当 token 在一小时后超时时,我不再访问工作表,并且应用程序崩溃了。

我不知道如何使用 authlib 刷新 token ,我们选择该库的原因是因为它与 gspread 集成,并且它应该为您自动刷新身份验证 token 。我用于登录的代码如下,但一小时后,gspread 函数 open_by_key() 由于身份验证问题而失败。

我尝试重新创建 gspread 客户端,但这只是使用相同的 token 。我觉得应该有一种方法可以刷新 token 以将其生命周期再延长一个小时,但我找不到如何使用 authlib 来做到这一点。

creds = OAuth2Session(clientId, clientSecret, scope=scope, redirect_uri=redirectUrl)
authUrl, state = creds.create_authorization_url('https://accounts.google.com/o/oauth2/v2/auth', response_type='token')

在浏览器中加载authURL并让用户登录。浏览器以urlString形式返回身份验证响应

creds.fetch_access_token(authorization_response=urlString)

gc = gspread.Client(None, creds)
ss = gc.open_by_key(sheetKey)
todaysSheetName = datetime.datetime.now().strftime('%d-%m-%Y')
wks = ss.worksheet(todaysSheetName)

最佳答案

authUrl, state = creds.create_authorization_url('https://accounts.google.com/o/oauth2/v2/auth', response_type='token')

根据您使用的此代码,response_type=token 是隐式授予类型流程。我猜想隐式流程的 token 中不会有 refresh_token 。以下是我的建议:

  1. 尝试将其更改为授权代码流程
  2. 使用数据库保存 token
  3. 如果 token 已过期,请使用之前保存的 token 的 refresh_token 来交换新 token 。

refresh_token 方法很简单:

refresh_token(url=None, refresh_token=None, body='', auth=None, headers=None, **kwargs)

使用您的代码,它应该是:

refresh_token = your_previous_token.refresh_token
new_token = creds.refresh_token('https://accounts.google.com/...', refresh_token=refresh_token)

问题是没有关于这部分的文档。但按照API的说法,应该是这样使用的。如果它不起作用,您可以将其报告给 Authlib 问题跟踪器。

关于python - 如何使用 Authlib 和 Gspread 刷新身份验证 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58217398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com