gpt4 book ai didi

python - OAuth 在 Google OAuth2 中抛出 "missing code validator"

转载 作者:太空狗 更新时间:2023-10-29 22:24:11 27 4
gpt4 key购买 nike

我正在关注 this example尝试使用 Google API 对我的用户进行身份验证。
这是我正在使用的相关代码,几乎与示例中的代码完全相同:

@app.route('/login/')
def login():
flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
'client_secret.json',
scopes=['https://www.googleapis.com/auth/drive.file'])
flow.redirect_uri = 'https://localhost:5000/oauth2callback/'
authorization_url, state = flow.authorization_url(
access_type='offline',
include_granted_scopes='true')
session['state'] = state
return redirect(authorization_url)

#called by Google's oauth
@app.route('/oauth2callback/')
def oauth2callback():
state = request.args['state']
# Use the client_secret.json file to identify the application requesting
# authorization. The client ID (from that file) and access scopes are required.
state = session['state']
flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
'client_secret.json',
scopes=['https://www.googleapis.com/auth/drive.file'],
state=state)
flow.redirect_uri = url_for('oauth2callback', _external=True)

authorization_response = request.url
flow.fetch_token(authorization_response=authorization_response, code_verifier=False)

当我这样做时,它给出了错误,oauthlib.oauth2.rfc6749.errors.InvalidGrantError: (invalid_grant) 缺少代码验证器。

我不知道代码验证器是什么,示例中也没有提到。

如果有人认为有帮助,可以使用堆栈跟踪

我该如何解决这个问题?感谢您的帮助!

最佳答案

这似乎是 google-auth-oauthlib 0.4.0 版本中的一个错误(参见 this upstream issue ;请注意,在发布此 SO 问题后已报告)。

您有以下选择:

  1. 作为解决方法,您可以降级使用的版本:
    pip install --upgrade google-auth-oauthlib==0.3.0
  2. 实例化时通过自定义代码验证器 google_auth_oauthlib.flow.Flow() ,这should be 43-128 个字符的随机字符串,用于使用 PKCE 验证 key 交换:
    oauth2_session, client_config = google_auth_oauthlib.helpers.session_from_client_secrets_file(
    'client_secret.json',
    scopes=['https://www.googleapis.com/auth/drive.file']),
    )
    flow = google_auth_oauthlib.flow.Flow(
    oauth2_session,
    client_type='web',
    client_config=client_config,
    redirect_uri='https://localhost:5000/oauth2callback/',
    code_verifier='<random string>'
    )
    注意:该代码适用于您的 login()功能。您将不得不稍微调整它以在您的 oauth2callback() 中工作。功能。
  3. 等到错误在上游被修复(前提是它是一个错误)。之后,如果没有提供代码验证器,将自动生成。

关于python - OAuth 在 Google OAuth2 中抛出 "missing code validator",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56555687/

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