0

РЕШЕННЫЙ!Вызов API Google Диска возвращает Invalid_grant OAuth2

Проблема не в моем коде. Я вручную установил время на своем Linux Server, а это значит, что сервер Google отказался предоставить мне доступ. Я использовал следующую команду на своем сервере, чтобы установить время: ntpdate 0.europe.pool.ntp.org

Оригинальное издание:

В настоящее время я пытаюсь создать небольшой скрипт в NodeJS, который читает некоторые значения из таблицы Google, и писать к файлу в формате JSON.

Код работает без проблем на моем Mac, но после загрузки в Ubuntu 14.04.4 некоторые функции из модуля google-spreadsheet не работают и возвращают неопределенные.

Я не уверен на 100%, есть ли проблема с узловым модулем или что-то не так с моим кодом.

код, который делает вызов:

var GoogleSpreadsheet = require('google-spreadsheet'); 
var fs = require('fs'); 

function scheduleBidding(sheetSecretKey) { 
    this.sheetKey = sheetSecretKey; 
} 

scheduleBidding.prototype.getBiddingHeaders = function (filePrefix) { 
var doc = new GoogleSpreadsheet(this.sheetKey); 
var sheet; 
var daysSinceYearStart = getDaysIntoYear(); 
var localSheetKey = this.sheetKey; 
var biddingObject = new Object(); 
var filePath = filePrefix+"staticConfigFiles/googleApiKey"; 
console.log(filePath); 
fs.readFile(filePath, 'utf8', function (err, data) { 
    creds = JSON.parse(data); 
    console.log(creds); 
    doc.useServiceAccountAuth(creds, function (err) { 
     if(err) throw err; 
     doc.getInfo(function (err, info) { 
      if(err) throw err; 
      console.log(info); 
      sheet = info.worksheets[0]; 
      var numberOfColumns = sheet.colCount; 
      sheet.getCells({ 
       'min-row': 1, 
       'max-row': 1, 
       'min-col': 2, 
       'max-col': numberOfColumns, 
       'return-empty': true 
      }, function(err, cells) { 
       sheet.getRows({ 
        offset: 1, 
        limit: 366 
       }, function(err, rows){ 
        yesterdaysBid = rows[daysSinceYearStart-2]; 
        todaysBidding = rows[daysSinceYearStart-1]; 
        cells.forEach(function (listItem, indexArray) { 
         columnName = cells[indexArray].value; 
         var functionName = String(columnName.toLowerCase()); 
         functionName = functionName.replace(/\s/g, '').replace(":", ""); 
         biddingObject[columnName] = { 
          "yesterdaysBid": yesterdaysBid[functionName], 
          "todaysBid": todaysBidding[functionName] 
         }; 
         newFileName = filePrefix+"scheduleData/"+localSheetKey+".json"; 
         prettyJson = JSON.stringify(biddingObject); 
         fs.writeFile(newFileName, prettyJson); 
         console.log("ScheduleBidding JSON has been updated"); 
        }); 
       }); 
      }); 
     }); 
    }); 
}); 

function getDaysIntoYear() { 
    var todaysDate = new Date(); 
    var daysAgo; 

    // 
    returnDays = parseInt(todaysDate.getDate())+daysAgo; 
    return returnDays; 
} 
}; 

Я получаю следующее исключение, когда я выполнить скрипт на моем сервере Ubuntu:

Error: invalid_grant 
www-0  at Request._callback (/SomePath/node_modules/google-spreadsheet/node_modules/google-auth-library/node_modules/gtoken/lib/index.js:215:34) 
www-0  at Request.self.callback (/SomePath/node_modules/google-spreadsheet/node_modules/google-auth-library/node_modules/gtoken/node_modules/request/request.js:187:22) 
www-0  at Request.EventEmitter.emit (events.js:98:17) 
www-0  at Request.<anonymous> (/SomePath/node_modules/google-spreadsheet/node_modules/google-auth-library/node_modules/gtoken/node_modules/request/request.js:1044:10) 
www-0  at Request.EventEmitter.emit (events.js:95:17) 
www-0  at IncomingMessage.<anonymous> (/SomePath/node_modules/google-spreadsheet/node_modules/google-auth-library/node_modules/gtoken/node_modules/request/request.js:965:12) 
www-0  at IncomingMessage.EventEmitter.emit (events.js:117:20) 
www-0  at _stream_readable.js:920:16 
www-0  at process._tickDomainCallback (node.js:459:13) 

Заранее спасибо за помощь. Дайте мне знать, если какая-либо информация отсутствует.

+0

Вы выполнили 'npm install' право? Похоже, у вас есть. Возможно, проверьте версию, установленную на вашем Mac, и измените запись 'package.json', чтобы точно соответствовать этой версии. – david

+0

Да. Я могу опубликовать файл package.json, если это будет полезно? Я могу видеть функцию, которую я должен использовать в /node_modules/google-spreadsheet/index.js с помощью команды nano. – Thyregod

+0

Версия модуля google-spreadsheet и версия, указанная в package.json, является совпадением. – Thyregod

ответ

0

Спасибо за помощь! Я, наконец, решил проблему. Это не код, а настройки моего сервера. Я обновил этот вопрос, чтобы более конкретно рассказать о проблеме.

0

Мне кажется, что ваши учетные данные отсутствуют или неверны. Вы должны реагировать на возможные ошибки в обратном вызове useServiceAccountAuth.

var filePath = filePrefix+"/some/filePath.json"; // <- correct credentials? 
doc.useServiceAccountAuth(creds, function (err) { 
    if(err) // handle error, you should see whats wrong 
}); 
+0

Думаю, это помогло мне в правильном направлении. Я зарегистрировал новое исключение, похоже, что это авторизация, и это проблема. – Thyregod

Смежные вопросы