Ошибка входа в систему при загрузке файлов на диск Google с помощью NodeJS (ExpressJS) - PullRequest
0 голосов
/ 27 февраля 2020

Я разрабатываю NodeJS API для загрузки нескольких изображений в Google Driver, когда пользователь создает электронную книгу (включая имя, описание и ebookPhoto), я использую ExpressJS для написания Rest API. А с помощью multer-google-drive это механизм хранения промежуточного программного обеспечения для загрузки файлов на Google Drive. Я также перехожу по этой ссылке Загрузка изображений на Google Drive , чтобы загрузить файл на Google Drive. Ниже приведены шаги, которые я сделал.

1 - Шаг 1: Я запускаю следующий код, чтобы получить файл "token. json".

const fs = require('fs');
const readline = require('readline');
const { google } = require('googleapis');

const SCOPES = ['https://www.googleapis.com/auth/drive.file']; // This SCOPE is for upload file
const credentials = require('./credentials.json');
const TOKEN_PATH = 'token.json';

const getAccessToken = (oAuth2Client, resolve, reject) => {
  const authUrl = oAuth2Client.generateAuthUrl({
    access_type: 'offline',
    scope: SCOPES,
  });
  console.log('Authorize this app by visiting this url:', authUrl);
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
  });
  rl.question('Enter the code from that page here: ', (code) => {
    rl.close();
    oAuth2Client.getToken(code, (err, token) => {
      if (err) return reject('Error retrieving access token', err);
      oAuth2Client.setCredentials(token);
      // Store the token to disk for later program executions
      fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => {
        if (err) return reject(err);
        console.log('Token stored to', TOKEN_PATH);
      });
      resolve(oAuth2Client);
    });
  });
}

2 - Шаг 2 Я запускаю ниже код для получения авторизации:

const {google} = require('googleapis');
const credentials = require('./credentials.json')
const token = require('./token.json');


const authorize = () => {
    const { client_secret, client_id, redirect_uris } = credentials.installed;
    const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris[0]);

    if (token && typeof token === 'object') {
      return oAuth2Client.setCredentials(token);
    }
    return null
}


var drive = google.drive({version: 'v3', auth: authorize});

3 - Шаг 3 - это шаг с использованием multer-google-drive для загрузки файлов, я делаю так:

// Upload lên storage của google
var gDriverUpload = multer({
    storage: GoogleDriveStorage({
      drive: drive,
      parents: 'id-parents', // this is id of folder in google drive
      fileName: function (req, file, cb) {
        let filename = `ebook-${file.originalname}`;
        cb(null, filename);
      }
    })
  })

И это мой маршрут для API:

// Create and upload to google driver
EbookRouter.post('/gdriver', gDriverUpload.array('ebookPhoto', 5), ebookController.createEbook);

Поэтому, когда я вызываю API таким образом, чтобы загрузить информацию Ebook (включая ebookPhoto), я получаю имя ошибки: «Требуется вход в систему» ​​

localhost:3009/api/ebook/gdriver

Ошибка детализации ниже:

POST /api/ebook/gdriver 500 1478.509 ms - 354
Error: Login Required
    at Gaxios._request (E:\google_api_uploader\node_modules\gaxios\build\src\gaxios.js:85:23)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Пожалуйста, помогите мне выяснить эту проблему. Большое вам спасибо

...