Основываясь на ответе s3rvac, я немного покопался в исходном коде и обнаружил, что свойство code_verifier
фактически автоматически генерируется в методе authorization_url()
!Так что вам не нужно создавать его самостоятельно.
В вашем методе login()
после вызова flow.authorization_url()
сохраните flow.code_verifier
в сеансе:
authorization_url, state = flow.authorization_url(
access_type='offline',
include_granted_scopes='true') # code_verifier is set in this method
session['code_verifier'] = flow.code_verifier # Get and store the code
session['state'] = state
return redirect(authorization_url)
Затем вметод обратного вызова, просто загрузите его обратно:
flow = google_auth_oauthlib.flow.Flow(
oauth2_session,
client_type='web',
client_config=client_config,
redirect_uri='https://localhost:5000/oauth2callback/',
code_verifier=session.get['code_verifier'] # Load the code
)
Я использую Flow.from_client_config()
для создания Flow
, но я просто добавляю эту строку, и она отлично работает:
flow.code_verifier = session.get('code_verifier')