Google-api-nodejs-client: .getToken devolviendo invalid_request

Creado en 27 jul. 2014  ·  3Comentarios  ·  Fuente: googleapis/google-api-nodejs-client

Recibo un error cada vez que llamo a getToken con un código de autenticación válido. Aquí está el registro de errores impreso a través del siguiente código:

Error getting tokens:  invalid_request

¿Hay algún problema con la forma en que estoy usando las API? Agradezco cualquier indicación...

var express = require('express');
var router = express.Router();
var google = require('googleapis');
var urlshortener = google.urlshortener('v1');
var OAuth2 = google.auth.OAuth2;
var plus = google.plus('v1');
var googleClientInfo = { "web": {...} };
var oauth2 = new OAuth2(googleClientInfo.web.client_id, googleClientInfo.web.client_secret, googleClientInfo.web.redirect_uris);
var scopes = [  'https://www.googleapis.com/auth/plus.me',
  'https://www.googleapis.com/auth/calendar'
];
google.options({ auth: oauth2 }); // set auth as a global default
var authUrl = oauth2.generateAuthUrl( {
  access_type: 'offline',
  scope: scopes
});

/* GET authCode from Google Server */
router.get('/', function(req, res) {
  console.log('Redirecting to URL: ' + JSON.stringify(authUrl));
  res.redirect(authUrl);
});

/* '/successful' is the redirect_uri with authCode query */
router.get('/successful', function(req, res) {
  console.log('Got code: ', (req.query.code));
  oauth2.getToken(req.query.code, function(err, tokens) {
    if(err) {
        console.log("Error getting tokens: ", err);
        res.redirect('/');
    } else {
        console.log("Saving tokens: ", JSON.stringify(tokens));
        // Save tokens
        oauth2.setCredentials(tokens);
        plus.people.get({ userId: 'me', auth: oauth2 }, function(err, response) {
          if(err) {
              console.log("Error getting userId: ", err);
              res.redirect('/');      
          } else {
              res.send('Login Successful: ' + JSON.stringify(response));
              console.log('Login Successful: ' + JSON.stringify(response));
          }
        });
    }
  });
});

module.exports = router;
triage me

Comentario más útil

¡Sí, eso funciona! ¿Crees que es una buena idea arrojar un error si URI es una matriz? Ahorraría tiempo de depuración para un alma pobre como yo :). Muchas gracias por tu ayuda. Salud.

Todos 3 comentarios

Actualización: agregué un código de registro en oauth2client.js de la siguiente manera:

/**
 * Gets the access token for given code.
 * <strong i="6">@param</strong> {string} code The authorization code.
 * <strong i="7">@param</strong> {function=} opt_callback Optional callback fn.
 */
OAuth2Client.prototype.getToken = function(code, opt_callback) {
  var uri = this.opts.tokenUrl || OAuth2Client.GOOGLE_OAUTH2_TOKEN_URL_;
  var values = {
    code: code,
    client_id: this.clientId_,
    client_secret: this.clientSecret_,
    redirect_uri: this.redirectUri_,
    grant_type: 'authorization_code'
  };

 console.log("posting to uri: ", uri + ", with values: " + JSON.stringify(values));

  this.transporter.request({
    method: 'POST',
    uri: uri,
    form: values,
    json: true
  }, opt_callback);
};

Obtengo los siguientes registros (he agregado algunos * * para ocultar la información del usuario

posting to uri:  https://accounts.google.com/o/oauth2/token, with 
values: {"code":"4/U2PMY1Gu6ImEuax57j9an7UoBBFa.or_RbQzmcKYZBrG_bnfDxpJe-8vsjgI", 
"client_id":"**********62-srmgmr0i8ck7j4vvi0454ntcfkoufgu1.apps.googleusercontent.com", 
"client_secret":"CdhVi3Yk21g_uswaDZafTeNC", 
"redirect_uri":["https://*********.herokuapp.com/googleLogin/successful"], 
"grant_type":"authorization_code"}

Error getting tokens:  invalid_request

Lo anterior se ve bien, pero ¿por qué recibo una devolución de llamada con err establecido en invalid_request? ¿Algo mal con el transportador tal vez?

¿Cuál es el contenido de googleClientInfo.web.redirect_uris ? ¿Es una cuerda? Si es una matriz, intente especificar el primer valor de la matriz como googleClientInfo.web.redirect_uris[0] . Si obtiene un código de autenticación válido, no estoy seguro de si eso importaría.

Tal vez podría intentar jugar con https://developers.google.com/oauthplayground/ y comparar sus solicitudes con las solicitudes que envía su código.

¡Sí, eso funciona! ¿Crees que es una buena idea arrojar un error si URI es una matriz? Ahorraría tiempo de depuración para un alma pobre como yo :). Muchas gracias por tu ayuda. Salud.

¿Fue útil esta página
0 / 5 - 0 calificaciones