La guía paso a paso o código que encontrarás en este post es la resolución más rápida y válida que hallamos a esta duda o problema.
Solución:
La guía del maniquí para Google OAuth de 3 patas.
Literalmente, todo lo que necesita saber está en esta única página https://developers.google.com/identity/protocols/OAuth2WebServer. Léelo dos veces y serás un ninja de OAuth. En resumen dice…
- Construya una URL de accounts.google.com con 4 parámetros de consulta: –
client_id
para identificar tu aplicaciónscope
para decir qué permisos estás solicitandoredirect_uri
para decirle a Google dónde redirigir el navegador del usuario con el resultadoresponse_type=code
para decir que quieres un código de autenticación
- redirigir el navegador del usuario a esa URL
- Toma un sorbo de café mientras el usuario inicia sesión, elige su cuenta de Google y otorga el permiso, hasta que finalmente…
- El navegador del usuario se redirige de nuevo a su aplicación
redirect_uri
, con un parámetro de consulta decode
que es el código de autenticación de una sola vez - Publique el código de autenticación en el extremo del token de Google
- Analice la respuesta JSON para obtener el token de acceso
- Use el token de acceso en un encabezado http de “autorización: bearer access_token” para sus posteriores solicitudes de API de Google
Si va a https://developers.google.com/oauthplayground/, puede seguir los pasos en línea para ver cómo se ven las distintas URL y respuestas.
Escribí esta biblioteca para obtener información del usuario, espero que esto ayude.
'use strict'
const google = require('googleapis')
const credentials = require('../configs/config').google
class googleApi
constructor()
const client_id, client_secret, redirectUri = credentials;
this.oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirectUri)
generateUrl(scopes)
const url = this.oAuth2Client.generateAuthUrl(
access_type: 'offline',
scope: scopes.join(' ')
)
return url;
async getUserInfo(code)
const credentials = await this.oAuth2Client.getToken(code)
this.oAuth2Client.setCredentials(credentials.tokens);
const plus = google.plus(
version: 'v1',
auth: this.oAuth2Client,
);
const data = await plus.people.get(userId: 'me');
return data;
module.exports = new googleApi();
y esta es la implementación:
'use strict'
const googleApi = require('../libs/google');
exports.requestGmailAuth = function (req, res, next)
let url = googleApi.generateUrl(scopes)
res.redirect(url);
exports.getGmailUserInfo = async function (req, res, next)
const qs = new url.URL(req.url, 'http://localhost:3000').searchParams;
let code = qs.get('code')
if(!code)
next(new Error('No code provided'))
googleApi.getUserInfo(code)
.then(function(response)
res.send(response.data)
).catch(function(e)
next(new Error(e.message))
)
estas son las rutas:
app.get('/request/gmail/auth', user.requestGmailAuth)
app.get('/get/gmail/user', user.getGmailUserInfo)
Cuando /request/gmail/auth recibe una solicitud, se redirige a la página de consentimiento y luego la página de consentimiento se redirige a /get/gmail/user con el parámetro “código”.
pruebe este fragmento y, si el problema persiste, verifique su identificación de cliente y secreto de cliente, y también asegúrese de tener google plus api habilitado en su panel de desarrollador.
Si haces scroll puedes encontrar los comentarios de otros administradores, tú igualmente tienes el poder mostrar el tuyo si lo crees conveniente.