2017-09-02 2 views
0

Je tente d'extraire des courriels de l'API Gmail de Google une fois qu'ils sont sur une page spécifique de ma demande. Les utilisateurs, une fois qu'ils sont sur cette page, se sont déjà connectés et sont authentifiés avec mon application et j'ai un accès complet à lire/écrire/modifier des emails.Node.js Erreur API Google, informations d'identification non valides ... Je ne sais pas exactement ce que je fais avec les jetons et j'essaie d'effectuer des appels côté serveur

Je rencontre des problèmes pour exécuter la fonction a gmail.users.threads.list() après cette étape. Quelqu'un pourrait-il essayer de m'aider à comprendre ce que je fais de façon incorrecte?

Je pensais pouvoir utiliser le jeton que j'ai obtenu une fois que l'utilisateur s'est connecté et authentifié avec mon application, mais cela ne semble pas être le cas.

Merci beaucoup d'avance !!!

est Ci-dessous le code:

const async = require('async'); 
const Order_info_item_scrape = require('../models/Order_info_item_scrape.js'); 
const Message = require('../models/Message.js'); 
var message_data = [] 
const passport = require('passport'); 
var mongoose = require('mongoose'); 
mongoose.Promise = require('bluebird'); 

var google = require('googleapis'); 
var OAuth2 = google.auth.OAuth2; 
var oauth2Client = new OAuth2(
    process.env.GOOGLE_ID, 
    process.env.GOOGLE_SECRET, 
    process.env.REDIRECT_URIS 
); 

var gmail = google.gmail({ 
    version: 'v1', 
    auth: oauth2Client 
}); 


google.options({ auth: oauth2Client }); 

exports.getOrder = (req, res) => { 

    if (req.user.initial_scrape_state == 'need_initial') { 
    console.log('here') 

    oauth2Client.setCredentials({ 
     access_token: req.user.tokens[0].accessToken, 
     refreshToken: req.user.tokens[0].accessToken 
    }); 


    oauth2Client.getToken(oauth2Client.access_token, function (err, tokens) { 
     // Now tokens contains an access_token and an optional refresh_token. Save them. 
     if (!err) { 
     oauth2Client.setCredentials(tokens); 
     } 
    }); 

    oauth2Client.refreshAccessToken(function(err, tokens) { 
     // your access_token is now refreshed and stored in oauth2Client 
     // store these new tokens in a safe place (e.g. database) 
    }); 

     var message 

     var retailers = ['[email protected]'] 
     var key_words = '{subject:order subject:reciept subject:confirmation subject:purchase}' 
     query = 'in: anywhere,' + retailers +','+ key_words 
     //console.log(query) 
     gmail.users.threads.list({ 
     auth: oauth2Client, 
     userId: req.user.email, 
     q: query 
     }, function(err, response) { 
     if (err) { 

      console.log('The API returned an error: ' + err); 
      return; 
     } 

     var threads = response['threads'] 
     if (threads.length == 0) { 

      console.log('No labels found.'); 

     } else { 

      for (var i = 0; i < threads.length; i++) { 
      var thread = threads[i]; 
      console.log(req.user.email) 

      //getMessage(i ,auth, thread) 

      } 
     } 
     }); 





    } 

Répondre

0

On dirait que vous essayez d'attribuer le jeton d'accès de l'utilisateur comme refresh token, puis en essayant de nourrir que les creds à votre appel .list().

oauth2Client.setCredentials({ 
     access_token: req.user.tokens[0].accessToken, 
     refreshToken: req.user.tokens[0].accessToken 
    }); 

De plus, si vous jetez un oeil à vous Google's quickstart example remarquerez qu'il affecte directement la oauth2Client.credentials. Je me demande si votre propriété .credentials est réellement assignée.