google-api-nodejs-client 在使用令牌交换代码时抛出 invalid_request 错误
google-api-nodejs-client throws invalid_request error when exchanging code with tokens
我有一个简单的客户端应用程序,使用 react-google-login,设置如下:
<GoogleLogin
clientId={config.CLIENT_ID}
scope={config.SCOPES.join(' ')}
buttonText="Login With Google"
onSuccess={response => onSignIn('google', response)}
onFailure={this.failure.bind(this)}
accessType="offline"
responseType="code"
/>
取码成功,发送到NodeJS编写的后台服务器
服务器端代码如下所示:
const { google } = require('googleapis');
const config = global.config;
const oauth2Client = new google.auth.OAuth2({
clientId: config.google.CLIENT_ID,
clientSecret: config.google.CLIENT_SECRET,
});
// code omitted for the sake of simplicity
var authCode = req.body.authCode; // the provided code by google
const { tokens } = await oauth2Client.getToken(authCode);
return tokens;
当我 运行 代码时,它抛出错误:
{ error: 'invalid_request',
error_description: 'Missing parameter: redirect_uri' } },
code: '400' }
如果我将 redirectUrl 添加到开发者控制台、客户端应用程序和服务器端应用程序,我将收到 redirect_uri_mismatch
错误。
我有点卡在这里,在网上找不到任何有用的东西。
我们将不胜感激。
找到解决方案
基于 this post、
上的回复之一(令人惊讶的是,不是答案)
我需要做的就是在我的客户端 react-google-login 按钮和服务器上的 oauth2Client 配置中放置 postmessage
而不是实际的 URL。
根本不需要 redirect_uri 开发者控制台。
<GoogleLogin
clientId={config.CLIENT_ID}
****redirectUri="postmessage"****
scope={config.SCOPES.join(' ')}
buttonText="Login With Google"
onSuccess={response => onSignIn('google', response)}
onFailure={this.failure.bind(this)}
accessType="offline"
responseType="code"
/>
const oauth2Client = new google.auth.OAuth2({
clientId: config.google.CLIENT_ID,
clientSecret: config.google.CLIENT_SECRET,
****redirectUri: 'postmessage'****
});
确实解决了问题。 5 小时的工作、搜索和将我的头撞到办公桌上。我想知道为什么 Google 开发者网站上没有明确的文档。或者可能有但我找不到。
我有一个简单的客户端应用程序,使用 react-google-login,设置如下:
<GoogleLogin
clientId={config.CLIENT_ID}
scope={config.SCOPES.join(' ')}
buttonText="Login With Google"
onSuccess={response => onSignIn('google', response)}
onFailure={this.failure.bind(this)}
accessType="offline"
responseType="code"
/>
取码成功,发送到NodeJS编写的后台服务器
服务器端代码如下所示:
const { google } = require('googleapis');
const config = global.config;
const oauth2Client = new google.auth.OAuth2({
clientId: config.google.CLIENT_ID,
clientSecret: config.google.CLIENT_SECRET,
});
// code omitted for the sake of simplicity
var authCode = req.body.authCode; // the provided code by google
const { tokens } = await oauth2Client.getToken(authCode);
return tokens;
当我 运行 代码时,它抛出错误:
{ error: 'invalid_request',
error_description: 'Missing parameter: redirect_uri' } },
code: '400' }
如果我将 redirectUrl 添加到开发者控制台、客户端应用程序和服务器端应用程序,我将收到 redirect_uri_mismatch
错误。
我有点卡在这里,在网上找不到任何有用的东西。
我们将不胜感激。
找到解决方案
基于 this post、
上的回复之一(令人惊讶的是,不是答案)我需要做的就是在我的客户端 react-google-login 按钮和服务器上的 oauth2Client 配置中放置 postmessage
而不是实际的 URL。
根本不需要 redirect_uri 开发者控制台。
<GoogleLogin
clientId={config.CLIENT_ID}
****redirectUri="postmessage"****
scope={config.SCOPES.join(' ')}
buttonText="Login With Google"
onSuccess={response => onSignIn('google', response)}
onFailure={this.failure.bind(this)}
accessType="offline"
responseType="code"
/>
const oauth2Client = new google.auth.OAuth2({
clientId: config.google.CLIENT_ID,
clientSecret: config.google.CLIENT_SECRET,
****redirectUri: 'postmessage'****
});
确实解决了问题。 5 小时的工作、搜索和将我的头撞到办公桌上。我想知道为什么 Google 开发者网站上没有明确的文档。或者可能有但我找不到。