Node js with gmail api, API returned error: Error: unauthorized_client

Edit: Error on this piece of code:

var gmail = google.gmail('v1'); gmail.users.labels.list({ auth: auth, userId: 'me', }, function(err, response) { if (err) { console.log('The API returned an error: ' + err); return; } 

I am using gmail api with Node js. When I look at their quick start guide, I keep getting this error.

https://developers.google.com/gmail/api/quickstart/nodejs

  The API returned an error: Error: unauthorized_client 

Keep in mind, I looked through the quick start with my email address, everything was in order. No mistakes. I decided to create a dummy email address for testing. The only change I made was step 1-g disabling client_secret.json files to store the new credentials and key. I tried to revert to my old file, but the error still persists.

At the bottom of the page, the indicated link is indicated.

 Authorization information is stored on the file system, so subsequent executions will not prompt for authorization. Would I have to clear or refresh the information? If so how can I do this? 

If this helps, I will recompile all the code in the quickstart.js file.

 var fs = require('fs'); var readline = require('readline'); var google = require('googleapis'); var googleAuth = require('google-auth-library'); var SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']; var TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE) + '/.credentials/'; var TOKEN_PATH = TOKEN_DIR + 'gmail-nodejs-quickstart.json'; // Load client secrets from a local file. fs.readFile('client_secret.json', function processClientSecrets(err, content) { if (err) { console.log('Error loading client secret file: ' + err); return; } // Authorize a client with the loaded credentials, then call the // Gmail API. authorize(JSON.parse(content), listLabels); }); /** * Create an OAuth2 client with the given credentials, and then execute the * given callback function. * * @param {Object} credentials The authorization client credentials. * @param {function} callback The callback to call with the authorized client. */ function authorize(credentials, callback) { var clientSecret = credentials.installed.client_secret; var clientId = credentials.installed.client_id; var redirectUrl = credentials.installed.redirect_uris[0]; var auth = new googleAuth(); var oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl); // Check if we have previously stored a token. fs.readFile(TOKEN_PATH, function(err, token) { if (err) { getNewToken(oauth2Client, callback); } else { oauth2Client.credentials = JSON.parse(token); callback(oauth2Client); } }); } /** * Get and store new token after prompting for user authorization, and then * execute the given callback with the authorized OAuth2 client. * * @param {google.auth.OAuth2} oauth2Client The OAuth2 client to get token for. * @param {getEventsCallback} callback The callback to call with the authorized * client. */ function getNewToken(oauth2Client, callback) { var authUrl = oauth2Client.generateAuthUrl({ access_type: 'offline', scope: SCOPES }); console.log('Authorize this app by visiting this url: ', authUrl); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('Enter the code from that page here: ', function(code) { rl.close(); oauth2Client.getToken(code, function(err, token) { if (err) { console.log('Error while trying to retrieve access token', err); return; } oauth2Client.credentials = token; storeToken(token); callback(oauth2Client); }); }); } /** * Store token to disk be used in later program executions. * * @param {Object} token The token to store to disk. */ function storeToken(token) { try { fs.mkdirSync(TOKEN_DIR); } catch (err) { if (err.code != 'EEXIST') { throw err; } } fs.writeFile(TOKEN_PATH, JSON.stringify(token)); console.log('Token stored to ' + TOKEN_PATH); } /** * Lists the labels in the user account. * * @param {google.auth.OAuth2} auth An authorized OAuth2 client. */ function listLabels(auth) { var gmail = google.gmail('v1'); gmail.users.labels.list({ auth: auth, userId: 'me', }, function(err, response) { if (err) { console.log('The API returned an error: ' + err); return; } var labels = response.labels; if (labels.length == 0) { console.log('No labels found.'); } else { console.log('Labels:'); for (var i = 0; i < labels.length; i++) { var label = labels[i]; console.log('- %s', label.name); } } }); } 
+5
source share
1 answer

I did console.log on TOKEN_PATH , it gave me the file path.

I had to delete the file

 /Users/user/.credentials/gmail-nodejs-quickstart.json 

which was a hidden folder that I could not find on my mac.

+9
source

Source: https://habr.com/ru/post/1242294/


All Articles