2014-07-02 9 views
6

Ich versuche, die neue Gmail API mit der Google API Node client zu verwenden. Ich habe ein neues Projekt von der Entwicklerkonsole erstellt, eine neue Client-ID "Dienstkonto" eingerichtet und den Zugriff auf die API aktiviert.Fehler 500 BackendError mit Gmail API und Google APIs Knoten-Client

Als Beweis des Konzepts versuche ich einfach, die Threads in meinem Posteingang aufzulisten. Wenn ich den OAuth 2.0-Schalter für die API explorer aktivieren und meine E-Mail-Adresse eingeben, ist die Anfrage erfolgreich und ich sehe eine JSON-Antwort mit Daten.

Jetzt versuche ich das gleiche in Knoten zu tun:

var googleapis = require('googleapis'); 

var SERVICE_ACCOUNT_EMAIL = '...SNIP...'; 

// generated by: openssl pkcs12 -in ...SNIP...p12 -out key.pem -nocerts -nodes 
var SERVICE_ACCOUNT_KEY_FILE = 'key.pem'; 
var jwt = new googleapis.auth.JWT(
     SERVICE_ACCOUNT_EMAIL, 
     SERVICE_ACCOUNT_KEY_FILE, 
     null, 
     ['https://www.googleapis.com/auth/gmail.readonly']); 

googleapis 
    .discover('gmail', 'v1') 
    .execute(function(err, client) { 

     jwt.authorize(function(err, result) { 
      if(err) console.error(err); 
      else console.log(result); 

      client.gmail.users.threads.list() 
       .withAuthClient(jwt) 
       .execute(function(err, result) { 
        if(err) console.error(err); 
        else console.log(result); 
      }); 
     }); 
    }); 

Zuerst habe ich die Ergebnisse der authorize() Anruf ausdrucken, das sieht aus wie es ein Token zurückgibt, so dass ich denke, dass ich all das OAuth Sachen Setup richtig :

{ access_token: '...SNIP...', 
    token_type: 'Bearer', 
    expires_in: 1404277946, 
    refresh_token: 'jwt-placeholder' } 

Dann versuche ich die API tatsächlich zu verwenden, aber ich erhalte eine Fehlermeldung:

{ errors: 
    [ { domain: 'global', 
     reason: 'backendError', 
     message: 'Backend Error' } ], 
    code: 500, 
    message: 'Backend Error' } 

An diesem Punkt weiß ich nicht, was ich noch versuchen soll. I denke, das OAuth-Zeug funktioniert ordnungsgemäß, weil ich keine Authentifizierungsfehler erhalten habe. Ich auch denke, die API selbst funktioniert und mein Konto ist in Ordnung, weil ich es über den API Explorer verwenden kann. Ich sehe keinen Hinweis darauf, dass die Node-Bibliothek auch einen Fehler hat. Kurz gesagt, ich habe keine Ahnung, was das Problem ist. Irgendwelche Ideen?

Antwort

0

Sie verwenden das Dienstkonto, um Ihre Anfragen an GMail zu authentifizieren. Dein Dienstkonto wird, soweit ich weiß, kein Google Mail haben, nur Nutzer haben Google Mail. Aus diesem Grund müssen Sie den OAuth2-Flow mit dem Benutzer ausführen (see here for example).

+1

Hmm, das ist ziemlich interessant. Ich versuche, dasselbe zu tun - nämlich ein OAuth 2.0-Dienstkonto mit der Google Mail-API zu verwenden und einen 500-Backend-Fehler zu erzielen. Haben Sie eine Quelle für den Hinweis, dass Sie kein Dienstkonto mit der GMail-API verwenden können? Ich dachte, dass diese Inhalte mit der Nutzer-Google Developer Console erstellt würden, weil sie mit diesem Nutzer verknüpft wären. – victorhooi

+0

Ja, es sagt [hier] (https://developers.google.com/gmail/api/auth/about-auth), dass Authentifizierung durch die Authentifizierung eines Benutzers mit OAuth 2.0-Flow erfolgt und beschreibt den allgemeinen Authentifizierungsablauf bei der Authentifizierung der Endbenutzer: 1. Registrieren Sie die Anwendung während der Entwicklung in der Google Developers Console. 2. Wenn die App gestartet wird, fordern Sie an, dass der Benutzer Zugriff auf Daten in seinem Google-Konto gewährt. 3. Wenn der Benutzer zustimmt, fordert und empfängt Ihre Anwendung Anmeldeinformationen für den Zugriff auf die Google Mail-API. 4. Aktualisieren Sie die Anmeldeinformationen (falls erforderlich). –