Google-api-nodejs-client: .getToken gibt invalid_request zurück

Erstellt am 27. Juli 2014  ·  3Kommentare  ·  Quelle: googleapis/google-api-nodejs-client

Ich erhalte jedes Mal eine Fehlermeldung, wenn ich getToken mit einem gültigen authCode aufrufe. Hier ist das Fehlerprotokoll, das über den folgenden Code gedruckt wird:

Error getting tokens:  invalid_request

Stimmt etwas mit der Art und Weise, wie ich die APIs verwende, nicht? Freue mich über jeden Hinweis...

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

Hilfreichster Kommentar

Ja das geht! Halten Sie es für eine gute Idee, einen Fehler auszulösen, wenn URI ein Array ist? Würde für eine arme Seele wie mich Debug-Zeit sparen :). Vielen Dank für Ihre Hilfe. Beifall.

Alle 3 Kommentare

Update: Ich habe wie folgt Protokollierungscode in oauth2client.js hinzugefügt:

/**
 * 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);
};

Ich erhalte die folgenden Protokolle (ich habe ein paar * * hinzugefügt, um die Benutzerinformationen auszublenden

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

Das obige sieht in Ordnung aus, aber warum erhalte ich dann einen Rückruf, bei dem err auf invalid_request gesetzt ist? Vielleicht stimmt etwas mit dem Transporter nicht?

Was ist der Inhalt von googleClientInfo.web.redirect_uris ? Ist es eine Schnur? Wenn es sich um ein Array handelt, versuchen Sie stattdessen, den ersten Wert im Array anzugeben, z. B. googleClientInfo.web.redirect_uris[0] . Wenn Sie einen gültigen authCode erhalten, bin ich mir nicht sicher, ob das eine Rolle spielen würde.

Vielleicht könnten Sie versuchen, mit https://developers.google.com/oauthplayground/ zu täuschen und Ihre Anfragen mit den Anfragen zu vergleichen, die Ihr Code sendet.

Ja das geht! Halten Sie es für eine gute Idee, einen Fehler auszulösen, wenn URI ein Array ist? Würde für eine arme Seele wie mich Debug-Zeit sparen :). Vielen Dank für Ihre Hilfe. Beifall.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen