共享文件无法使用drive.file作用域Google Drive API访问(获取共享文件列表)

时间:2019-12-03 03:57:19

标签: javascript google-drive-api

文件共享成功,共享用户收到电子邮件通知,文件显示在用户google驱动器中,但是当我们尝试使用API​​获取共享文件时,此文件不起作用。

var SCOPES = ["https://www.googleapis.com/auth/drive.file", "profile"];

function createPermissions(fileId, body) {
  gapi.client.load("drive", "v3", function() {
    gapi.client.drive.permissions
      .create({
        fileId: fileId,
        resource: body
      })
      .then(function(res) {
        //console.log(res);
        Swal.fire("Success!", "File has been success shared!", "success");
        // do something
      })
      .catch(function(err) {
        //console.log(err);
        Swal.fire({
          icon: "error",
          title: "Oops...",
          text: "Something went wrong! Plese try agian later!!",
          footer: ""
        });
        // do something
      });
  });
}

上面的代码工作正常,文件已成功共享,但是当共享用户登录的应用内用户无法访问共享文件时。

有人建议/帮助解决以上问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我建议您以这种方式调用Drive API:

// This is a good scope for testing
const SCOPES = ["https://www.googleapis.com/auth/drive"];

// This code takes into consideration that you already did all the OAuth2.0 proccess 
// correctly to connect to the Drive API
module.exports.init =  async function (){
    // Create the Drive service
    const drive = google.drive({version: 'v3', oauth2Client});
    // Create permissions for an user
   await  createPermissions(drive, null, null);
} 

// This function will create the permissions to share a file using Promises 
function createPermissions(drive, fileId, body){
    // These parameters are for test, past the values you want as arguments
    fileId = fileId || "your-file-id"; 
    body = body || {
        "role": "writer",
        "type": "user",
        "emailAddress": "user@domain"
    };
    // Create the promise and return the value from the promise if you want to
    return new Promise((resolve, reject) => {
        try {
            // Call the endpoint, if there are no errors you will pass the results to resolve 
            // to return them as the value from your promise
            return drive.permissions.create({
                fileId: fileId,
                resource: body
            },
            (err, results) => {
                if(err) reject(`Drive error: ${err.message}`);
                resolve(results);
            });
        } catch (error) {
            console.log(`There was a problem in the promise: ${error}`);
        }
    });
}

我尝试过,文件成功共享给我想要的用户。请记住,以如下方式构建自己的身体:

{
   "role": "writer",
   "type": "user",
   "emailAddress": "user@domain"
};

文档

有些链接可进一步了解Drive API权限: