Google云端硬盘OAuth 2.0无效的grant_type

时间:2018-06-10 21:46:28

标签: javascript express google-drive-api google-oauth2

根据来自Google的OAuth2WebServer的示例,我正在尝试使用他们拥有的HTTP / REST方法从快速应用程序设置身份验证流程,但每次请求都会返回错误

我经历了Google OAuth “invalid_grant” nightmare — and how to fix it,但遗憾的是它并没有帮助。

{
  error: "unsupported_grant_type",
  error_description: "Invalid grant_type: "
}

这是我收到的错误的缩短版本。如果您需要查看更多错误,请告诉我,我可以发布。

服务器

const express = require('express');
const axios = require('axios');

const { web } = require('./src/client_id.json');

const app = express();
const { client_id, client_secret } = web;

let count = 0;

app.use(express.json());

/*************************
** REDIRECT USER TO GOOGLE AUTH **
*************************/
app.get('/', (req, res) => {
  const redirect_uri = 'http://localhost:5000/auth';
  const scope = 'https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.metadata.readonly';
  const access_type = 'offline';

  res.redirect(`https://accounts.google.com/o/oauth2/v2/auth?scope=${ scope }&access_type=${ access_type }&redirect_uri=${ redirect_uri }&response_type=code&client_id=${ client_id }`);
});

/*************************
** ON AUTH WE EXCHANGE ACCESS TOKEN FOR REFRESH TOKEN **
*************************/
app.get('/auth', (req, res) => {
  count++;

  if (count >= 2) {
    return res.redirect('http://localhost:3000');
  }

  const { code } = req.query;
  const redirect_uri = 'http://localhost:5000/auth';
  const grant_type = 'authorization_code';

  axios.post('https://www.googleapis.com/oauth2/v4/token', {
    code,
    client_id,
    client_secret,
    redirect_uri,
    grant_type
  }, {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  })
    .then(data => {
      console.log(data)
      res.redirect('http://localhost:3000');
    })
    // ALWAYS HITS THE CATCH "Invalid grant_type"
    .catch(err => {
      console.log(err);
      console.log('ERROR')
    });
});

app.listen(5000, console.log('Server listening on port 5000'));

0 个答案:

没有答案