2014-07-02 13 views
6

Sto provando a utilizzare il nuovo Gmail API con il Google API Node client. Ho creato un nuovo progetto dalla console degli sviluppatori, ho creato un nuovo ID client "Account servizio" e ho abilitato l'accesso all'API.Errore 500 backendError con API Gmail e API Node Client

Come prova del concetto, sto semplicemente cercando di elencare i thread nella mia casella di posta. Quando abilito il commutatore OAuth 2.0 per API explorer e inserisco il mio indirizzo email, la richiesta ha esito positivo e vedo una risposta JSON con dati.

Ora cerco di fare lo stesso in Node:

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

Per prima cosa ho stampare i risultati del authorize() chiamata, che sembra che restituisce un token, quindi penso di avere tutta la messa a punto roba OAuth correttamente :

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

poi cerco di utilizzare effettivamente l'API, ma ottengo un errore:

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

A questo punto, non so cos'altro provare. I penso che la roba di OAuth funzioni correttamente, perché non ho ricevuto alcun errore di autenticazione. Inoltre, penso che l' sia che l'API stia funzionando e che il mio account vada bene, perché posso usarlo tramite l'API Explorer. Non vedo alcuna indicazione che la libreria Node sia in errore. In breve, non ho idea di quale sia il problema. Qualche idea?

risposta

0

Stai utilizzando l'account di servizio per autenticare le tue richieste su GMail. Il tuo account di servizio non avrà un Gmail per quanto ne so, solo gli utenti hanno GMail. Per questo motivo è necessario eseguire il flusso OAuth2 con l'utente (see here for example).

+1

Hmm, è piuttosto interessante. Sto provando a fare la stessa cosa, ovvero utilizzare un account di servizio OAuth 2.0 con l'API di Gmail e anche un errore di backend 500. Avete una fonte per cui si dice che non è possibile utilizzare un account di servizio con l'API GMail? Ho pensato che poiché questo è stato creato attraverso la Google Developer Console di un utente, sarebbe stato associato a quell'utente? – victorhooi

+0

Sì, si dice [qui] (https://developers.google.com/gmail/api/auth/about-auth) che l'autenticazione viene eseguita autenticando un utente con flusso OAuth 2.0 e descrive il flusso di autenticazione generale con l'autenticazione del utente finale: 1. Durante lo sviluppo, registrare l'applicazione nella Google Developers Console. 2. Quando l'app si avvia, richiedere all'utente di concedere l'accesso ai dati nel proprio account Google. 3. Se l'utente acconsente, l'applicazione richiede e riceve le credenziali per accedere all'API di Gmail. 4. Aggiorna le credenziali (se necessario). –