使用无效的访问令牌时,驱动器API如何返回结果

时间:2019-12-18 14:52:44

标签: google-api google-drive-api

我的场景
我正在使用Google Drive API创建文件并获取文件列表。

我的问题
1.无论我在access_token中输入什么值,API都可以正常运行
2.如果我更改事件的顺序,并且在致电createDriveFile之前致电listDriveFiles,则会收到此错误:

  

错误:凭据无效       在Gaxios._request(/Users/tamirklein/superquery/bd/lambda/node_modules/googleapis-common/node_modules/google-auth-library/node_modules/gaxios/src/gaxios.ts:109:15)       在       在process._tickDomainCallback(internal / process / next_tick.js:228:7)

我的代码

if (!global._babelPolyfill) {
    var a = require("babel-polyfill")
}
import {google} from 'googleapis'
describe('Run query with API', async () => {
    it('check Drive APIs', async () => {
        process.env.x_region = 'us-east-1';
        let result = await test('start')
    })
    async function test(p1) {

        let auth = getBasicAuthObj();
        auth.setCredentials({
            access_token: "anyValueWork",
            refresh_token: "Replace With a valid refresh Token"
        });

        let fileList = await listDriveFiles(auth);
        let newFile = await createDriveFile(auth);
    }

    async function listDriveFiles(auth) {
        return new Promise((resolved) => {
            const {google} = require('googleapis');
            const drive = google.drive({version: 'v3', auth});

            drive.files.list({
                pageSize: 10,
                fields: 'nextPageToken, files(id, name)',
                q: 'trashed=false'
            }, (err, res) => {
                if (err) {
                    console.log('The API returned an error: ' + err);
                    resolved([err, null]);
                } else {
                    const files = res.data.files;
                    if (files.length) {
                        console.log(`We fetched ${files.length} Files`);
                        // files.map((file) => {
                        //     console.log(`${file.name} (${file.id})`);
                        // });
                    } else {
                        console.log('No files found.');
                    }
                    resolved([err, res]);
                }

            });
        });
    }
    async function createDriveFile(auth) {
        return new Promise(async (resolved) => {
            //const fs = require('fs');
            const {google} = require('googleapis');
            const drive = google.drive({version: 'v3', auth});

            let data = {
                value: 'value'
            };

            let fileName = 'fileName.txt';
            let fileMetadata = {
                'name': fileName
            };

            //  create buffer
            let stream = require('stream');
            let bufferStream = new stream.PassThrough();
            bufferStream.end(Buffer.from(JSON.stringify(data)));

            let media = {
                mimeType: 'application/json',
                body: bufferStream // fs.createReadStream("test.txt") //bufferStream //
            };
            drive.files.create({
                resource: fileMetadata,
                media: media,
                fields: 'id'
            }, function (err, file) {
                if (err) {
                    // Handle error
                    console.error("Error: savePasswordInDrive" + err);
                } else {
                    console.log('File Id: ', file.data.id);
                }
                resolved([err, file]);
            });
        })
    }

    async function _wait(milliseconds) {
        return new Promise(resolved => {
            setTimeout(() => {
                resolved()
            }, milliseconds)
        })
    }

    /**
     * Create oAuth object
     * @returns {OAuth2Client}
     */
    function getBasicAuthObj() {
        let clientId = 'Replace With a valid clientId';
        let clientSecret = 'Replace With a valid clientSecret';
        let redirectUrl = 'URL';

        return new google.auth.OAuth2(
            clientId,
            clientSecret,
            redirectUrl
        )
    }
})

关于如何解决此问题的任何想法?

0 个答案:

没有答案