Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

321
Visualizações
OAuth arroja "falta el validador de código" en Google OAuth2

Estoy siguiendo este ejemplo en un intento de autenticar a mis usuarios con la API de Google.
Aquí está el código relevante que estoy usando, casi exactamente como en el ejemplo:

 @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)

Cuando hago esto, da el error, oauthlib.oauth2.rfc6749.errors.InvalidGrantError: (invalid_grant) Missing code verifier.

No sé qué es un verificador de código, ni los ejemplos mencionan uno.

El seguimiento de la pila está disponible si alguien cree que ayudará

¿Cómo puedo solucionar este problema? ¡Cualquier ayuda es apreciada!

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Esto parece ser un error en la versión 0.4.0 de google-auth-oauthlib (consulte este problema anterior ; tenga en cuenta que se informó después de que se publicó esta pregunta SO).

Tienes las siguientes opciones:

  1. Como solución alternativa, puede degradar la versión usada:
     pip install --upgrade google-auth-oauthlib==0.3.0
  2. Pase un verificador de código personalizado cuando cree una instancia de google_auth_oauthlib.flow.Flow() , que debe ser una cadena aleatoria de 43-128 caracteres utilizada para verificar el intercambio de claves mediante PKCE :
     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>' )
    Nota: El código es para su función de inicio de login() . Tendrá que ajustarlo ligeramente para que funcione en su función oauth2callback() .
  3. Espere hasta que el error se solucione en sentido ascendente (siempre que sea un error). Después de eso, el verificador de código se generará automáticamente cuando no se proporcione.
over 4 years ago · Santiago Trujillo Relatório

0

Basado en la respuesta de s3rvac, profundicé un poco en el código fuente y descubrí que la propiedad code_verifier de hecho se genera automáticamente en el métodoauthorization_url authorization_url() . Así que no es necesario que generes uno tú mismo.

En su método login() , después de la llamada a flow.authorization_url() , almacene flow.code_verifier en la sesión:

 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)

Luego, en el método de devolución de llamada, simplemente vuelva a cargarlo:

 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 )

Uso Flow.from_client_config() para construir un Flow , pero solo agrego esta línea y funciona bien:

 flow.code_verifier = session.get('code_verifier')
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda