我正在使用Meteor框架来实现Google Drive API。我已经生成了clientId,clientSecret和redirectUrl。
在这种方法中,我必须获取URL,然后单击“ Allow”(允许)按钮,获得在重定向URL中输入的重定向URL。它在url中提供了代码,我已经保存了该代码。
checkForAuthorization = function() {
return new Promise(function(resolve, reject) {
console.log("checkForAuthorization method is running......");
var clientId, clientSecret, redirectUrl, oauth2Client;
clientId = "XYZ";
clientSecret = "ABC";
redirectUrl = "http://localhost:3000/home";
oauth2Client = new google.auth.OAuth2(clientId, clientSecret,
redirectUrl);
getGoogleDriveAccessToken(oauth2Client).then(function(result) {
resolve(result);
}).catch(function(error) {
reject();
});
});
};
此代码用于上传文件。登录名给我一个错误,提示需要登录。
var uploadFileOnGoogleDrive = function(token) {
return new Promise(function(resolve, reject) {
var fileMetadata = {
'name': 'Claremont-Coral-Pillow-12x241.jpeg'
};
var media = {
mimeType: 'image/jpeg',
body: fs.createReadStream
('/home/administrator/Pictures/Claremont-
Coral-Pillow-12x241.jpeg')
};
drive.files.create({
auth: token,
resource: fileMetadata,
media: media,
fields: 'id'
}, function (err, file) {
if (err) {
console.log("The error is ", err);
} else {
console.log('File Id: ', file.id);
}
});
});
};
我在做什么错了?
答案 0 :(得分:0)
您正在使用仅用于终端(命令提示符)的代码。 正如文档在下面的链接中所述
https://developers.google.com/drive/api/v3/quickstart/nodejs。
此示例中的授权流是为命令行设计的 应用。有关如何执行其他授权的信息 上下文,请参阅授权和验证。的部分 图书馆的自述文件。
对于您的答案,您应该通读并使用下面的API Doc链接中给出的代码:-
https://github.com/google/google-api-nodejs-client/#authorizing-and-authenticating
谢谢
答案 1 :(得分:0)
确保已遵循适用于所有应用程序的OAuth 2.0常规过程。
- 创建应用程序时,您可以使用Google进行注册 API控制台。然后Google提供您以后需要的信息, 例如客户ID和客户机密。
- 在Google API控制台中激活Drive API。 (如果API不是 列在API控制台中,然后跳过此步骤。)
- 当您的应用程序需要访问用户数据时,它会询问Google 特定的访问范围。
- Google向用户显示同意屏幕,要求他们 授权您的应用程序请求其一些数据。
- 如果用户批准,则Google会给您的申请一个 短期访问令牌。
- 您的应用程序请求用户数据,并将访问令牌附加到 请求。如果Google确定您的请求和令牌 有效,它将返回请求的数据。
有关其他参考,您可以遵循此SO post。
答案 2 :(得分:0)
由于版本问题不支持高于25.0.0.1,我在使用googleapis集成JavaScript时遇到了同样的问题,但是当我通过这样的认证时,它解决了我的问题
function uploadFile(tmp_path,_folderID,file_name,contentType,cb){
var __fileData = fs.createReadStream(tmp_path);
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(
client_id,
secretKey,
redirect_url
);
// Retrieve tokens via token exchange explained above or set them:
oauth2Client.credentials = {
access_token: body.access_token,
refresh_token: refreshToken
};
var drive = google.drive({version: 'v3', auth: oauth2Client});
drive.files.create({
resource: {
name: file_name,
parents: _folderID,
mimeType: contentType
},
media: {
mimeType: contentType,
body: __fileData
}
}, function (err, response) {
if(err) cb(err,null);
cb(null,'success');
})
};