2016-02-04 16 views
5

Edit: Các lỗi đang xảy ra trên trên đoạn mã này:js nút với gmail api, API trả về một lỗi: Lỗi: unauthorized_client

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

Tôi đang sử dụng gmail api với Node js. Khi tôi đi qua hướng dẫn nhanh chóng của họ, tôi tiếp tục nhận được lỗi này.

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

The API returned an error: Error: unauthorized_client 

Hãy ghi nhớ, tôi đã đi qua QuickStart với địa chỉ email của tôi, tất cả mọi thứ vẫn ổn. Không có lỗi nào cả. Tôi quyết định tạo một email giả cho mục đích thử nghiệm. Thay đổi duy nhất tôi thực hiện là step 1-g chuyển đổi các tệp client_secret.json để giữ bằng chứng xác thực và khóa mới. Tôi đã thử chuyển về tập tin cũ nhưng lỗi vẫn tồn tại.

Ở cuối trang trong liên kết được cung cấp.

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? 

Nếu nó giúp tôi sẽ đăng lại tất cả mã trong tệp quickstart.js của mình.

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

Trả lời

9

Tôi đã tạo một console.log trên TOKEN_PATH, nó đã cho tôi đường dẫn của tệp.

tôi đã phải xóa file

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

đó là một thư mục ẩn Tôi không thể tìm thấy trên mac của tôi.

Các vấn đề liên quan