www playground googleapis google email oauth google-plus google-oauth

email - playground - scopes oauth2



Google OAuth API para obtener la dirección de correo electrónico del usuario? (7)

A partir de 2017: utilice el alcance del email . Consulte Autorización de solicitudes de API .

Este alcance del correo electrónico es equivalente y reemplaza el alcance de https://www.googleapis.com/auth/userinfo.email .

Estoy jugando con el área de juegos OAuth 2.0 de Google usando mi propia cuenta de Google personal, pero parece que no puedo recuperar mi dirección de Gmail utilizando el patio de recreo.

El alcance que estoy usando es:

email profile https://www.googleapis.com/auth/plus.login

Pero cuando llamo a la API:

https://www.googleapis.com/oauth2/v2/userinfo

Obtengo diversa información sobre el usuario, como el apellido, el nombre, el sexo, la imagen, etc., pero no devuelve el correo electrónico del usuario.

¿Cómo recupero la dirección de correo electrónico del usuario? ¿Tengo el alcance incorrecto o estoy llamando a la API incorrecta? Siento que esto debería ser muy simple pero, literalmente, he tratado de resolver esto durante horas y no puedo encontrar una combinación de API y alcance que proporcione de manera consistente la dirección de correo electrónico del usuario.


Deberá agregar el https://www.googleapis.com/auth/userinfo.email scope o reemplazar https://www.googleapis.com/oauth2/v2/userinfo con él. Si está utilizando el ejemplo HTML que proporcionan, puede enumerar varios ámbitos separados por un espacio.

<span class="g-signin" data-callback="signInCallback" data-clientid="{{ plus_id }}" data-cookiepolicy="single_host_origin" data-requestvisibleactions="http://schemas.google.com/AddActivity" data-scope="https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email"> </span>


Esto es realmente un desafío ya que Google no proporciona un correo electrónico por defecto. Debe solicitarlo específicamente de Google Plus.

const scope = [ ''https://www.googleapis.com/auth/plus.me'', // request access here ''https://www.googleapis.com/auth/userinfo.email'', ]; auth.generateAuthUrl({ access_type: ''offline'', prompt: ''consent'', scope: scope, }); const plus = google.plus({ version: ''v1'', auth }); const me = await plus.people.get({ userId: ''me'' }); const userEmail = me.data.emails[0].value;

Hay una versión completa en esta publicación de blog que escribí: https://medium.com/@jackscott/how-to-use-google-auth-api-with-node-js-888304f7e3a0


Hay muchos problemas aquí en lo que estás haciendo y en cómo intentas hacerlo.

Para empezar, el extremo https://www.googleapis.com/oauth2/v2/userinfo está en desuso, y está programado para ser eliminado en septiembre de 2014. Ha comenzado a funcionar de manera inconsistente, por lo que no lo use.

Como señaló @abraham, utilizará el extremo de people.get en https://www.googleapis.com/plus/v1/people/me . Esto debería darle el campo de emails contiene una matriz de direcciones. En su caso, es probable que solo haya uno que tenga un tipo de "cuenta".


Para iniciar sesión con Google utilizando OAuth 2.0, no es necesario realizar una solicitud por separado para recibir el correo electrónico del usuario.

Cuando Google llama a la URL de devolución de llamada, proporciona un code en la cadena de consulta que puede usar para intercambiar token de acceso e identificador de ID. El token de ID es un JWT que contiene información de identidad del usuario, que incluye la dirección de correo electrónico.

Consulte más información aquí: https://developers.google.com/identity/protocols/OpenIDConnect


Vine aquí buscando por qué mi servidor no recibió el correo electrónico en respuesta a / oauth2 / v2 / userinfo api call. Solo una vez vi esto y ha funcionado bien en el pasado.

La respuesta dio buena pista. Mientras arreglaba esto, hubo varios otros recursos que ayudaron. Todavía no estoy seguro si esperar siempre el correo electrónico en la respuesta está bien. así que ponga el manejo de errores en el código en caso de que no se devuelvan los correos electrónicos.

  1. Documentación de la API de Google sobre la migración a Google + inicio de sesión .
  2. https://www.googleapis.com/auth/userinfo.email scope
  3. documentation recursos de personas
  4. Agregue google + api al proyecto usando la consola de Google developer . La (cuota) complementaria de llamadas es bastante alta (20m para google + signin api por día).
  5. Agregue el manejo de errores y el registro en el código del servidor en caso de que api no devuelva ningún correo electrónico. En mi caso, solo buscaba type = ''account'' email.