Загрузка файла на Google Drive: недостаточно прав - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь загрузить файл изображения green.png на мой диск Google, но по-прежнему получаю сообщение об ошибке

"НЕДОСТАТОЧНОЕ РАЗРЕШЕНИЕ".

Iподозреваю, что это связано с моим SCOPES.Я много раз модифицировал свои области видимости и продолжаю получать сообщение об ошибке.

У кого-нибудь есть идеи, что я могу сделать с моим кодом, чтобы успешно загрузить его на мой диск?Спасибо

var path = require("path");
const fs = require('fs');
const readline = require('readline');
const {google} = require('googleapis');
const OAuth2Client = google.auth.OAuth2;
const TOKEN_PATH = 'credentials.json';
var fileArr=[];
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
var multer = require("multer");
var upload = multer({dest: "./uploads"});
const SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly',
            'https://www.googleapis.com/auth/drive',
            'https://www.googleapis.com/auth/drive.file',
            'https://www.googleapis.com/auth/drive.metadata',
            'https://www.googleapis.com/auth/drive.photos.readonly',
            'https://www.googleapis.com/auth/drive.appdata',
            ];   

module.exports=function(app){
 app.post("/upload2", upload.array('file', 4) , function(req, res, next){
    const TOKEN_PATH = 'credentials.json';
      fs.readFile('client_secret.json', (err, content) => {
         if (err) return console.log('Error loading client secret file:',          
         err);
        authorize(JSON.parse(content), UploadFiles);
         });

         function authorize(credentials, callback) {
           const {client_secret, client_id, redirect_uris} = 
            credentials.installed;
           const oAuth2Client = new OAuth2Client(client_id, client_secret, 
           redirect_uris[0]);
           fs.readFile(TOKEN_PATH, (err, token) => {
           if (err) return getAccessToken(oAuth2Client, callback);
           oAuth2Client.setCredentials(JSON.parse(token));
           callback(oAuth2Client);
            });
           }

        function UploadFiles(auth) {
         console.log(auth)
         const drive = google.drive({version: 'v3', auth});
         var folderId = '1AM07eNAJz5D4oFa5ZB-0ygOa_tVjoAgR';
          var fileMetadata = {
              'name': 'green.png'
               parents: [folderId]
           };
          var media = {
              mimeType: 'image/png',
              body: fs.createReadStream('./img/green.png')
           };

         drive.files.create({
           resource: fileMetadata,
           media: media,
           fields: 'id'
        }, function (err, file) {
           if (err) {
          // Handle error
          console.log(err);
           } else {
             console.log('File Id: ', file.id);
            }
        });

       }
    })
  }

1 Ответ

0 голосов
/ 17 мая 2018

код: 403, ошибки: [{домен: «глобальный», причина: «достаточное количество разрешений», сообщение: «недостаточное разрешение»}]}

Означает, что именно выу вас нет прав на выполнение того, что вы пытаетесь сделать.

В вашем случае одна из двух причин может быть причиной вашей проблемы.

Либо пользователь, с которым вы прошли аутентификациюне имеет доступа к папке ниже, вы, возможно, пропустили ее, возможно, она принадлежит другому пользователю, и вы забыли поделиться с этим пользователем.

var folderId = '1AM07eNAJz5D4oFa5ZB-0ygOa_tVjoAgR';

Второй вариант заключается в том, что вы в настоящее время включаете все области действия.под солнцем вам действительно не нужно.Но если, когда вы впервые аутентифицировали этого пользователя, вам, например, было предложено прочитать только меня, то пользователь предоставил только разрешение на чтение меня.Вам нужно аутентифицировать вашего пользователя, и он запросит разрешения для дополнительных областей, которые вы добавили в свой код, и тогда он будет работать.

Вам действительно нужно только это, он дает доступ ко всему.

'https://www.googleapis.com/auth/drive',
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...