我已采取的步骤

使用Google开发人员控制台:


我已经创建了一个项目,并为该项目创建了一个客户端。
我已经激活了Youtube API数据
我将回调设置为http://localhost:3000/callback
我已经下载了“ client_secrets”。


节点服务器的初始步骤:


使用“ client_secrets”,我创建了一个新的OAuth2Client实例,并将其命名为oauth2Client
我使用oauth2Client变量生成了URL,并指定了以下内容:




var url = oauth2Client.generateAuthUrl({
            access_type: 'offline', //returns fresh token,
            scope: 'https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtubepartner'
        });




Google授权页面:


我转到生成的URL并单击授权,然后重定向到http://localhost:3000/callback上的回调


节点服务器的最后步骤:


我在网址中得到了“代码”(看起来像这样:4 / gZpLEwZWD6OVEE7F5uXXXXXXXXXXXXXXXXXXXX)
使用相同的oauth2Client变量,我尝试像这样获取令牌:




oauth2Client.getToken(code, function (err, tokens) {
    // set tokens to the client
    console.log('errors ' + err);
    console.log('tokens ' + tokens);
    oauth2Client.setCredentials(tokens);
})




console.log的结果是:

 errors Error: invalid_request
 tokens null




是什么导致invalid_request?我错过了哪一部分?



其他一些类似的问题提出了不同的解决方案

在这个问题上似乎有很多问题,但是大多数都是具体问题,答案往往含糊不清。
我在问一个通用的问题,并寻找一个具体的答案。

最佳答案

您没有提到oauth2Client实例的构造,因此这可能是GutHub google-api-nodejs-client/issues/231上的lib问题引起的

即,构造函数OAuth2中的第三个参数将是一个字符串

client_secrets.web.redirect_uris[0]




var oauth2Client = new OAuth2Client(
 client_secrets.web.client_id,
 client_secrets.web.client_secret,
 client_secrets.web.redirect_uris[0] //<-- take first uri
);

09-25 17:53