Raphael
Raphael

Reputation: 729

Google API, Node.js - redirect_uri_mismatch after getToken

I have a route on my backend application which should return an access token for a code sent from the frontend:

router.get('/token', (req, res) => {
  const auth = googleService.getAuth();

  auth.getToken(req.query.code, (error, res2) => {
    const data = { code: 200 }

    if (error) {
      data.code = error.code;
      data.error = error.response.data;
    } else {
      console.log(res2);
    }

    res
      .status(data.code)
      .send(data);
  })
});

I retrive auth from googleService.getAuth():

const { google } = require('googleapis');
const keys = require('../config/keys');

var module = module.exports = {
  getAuth: (token = false) => {
    let auth = new google.auth.OAuth2(
      keys.google.clientID,
      keys.google.clientSecret,
      keys.google.callbackURL
    );

    if (token) {
      auth.credentials = {
        access_token: token,
        refresh_token: null
      };
    }

    return auth;
  },
  youtube: google.youtube('v3')
};

In my config file, I have callbackURL:

module.exports = {
  google: {
    apiKey: 'XXXXXXXXXXXXXXXX',
    clientID: 'XXXXXXXXXXXXXX',
    clientSecret: 'XXXXXXXXXXXXXXX',
    callbackURL: 'http://localhost:3000/google/redirect'
  }
}

I also set it in my console:

enter image description here

However, I always have the following error when calling this route:

"error": {
  "error": "redirect_uri_mismatch",
  "error_description": "Bad Request"
}

Upvotes: 2

Views: 1025

Answers (2)

thibautj
thibautj

Reputation: 76

It's possible that you can't have a redirect URI that is local.

If so, you can have an http valid address for you localhost in 2 mins with https://ngrok.com

Hope it'll help

Upvotes: 0

Phil
Phil

Reputation: 175

The uri needs to match from the auth to the token. So it looks like you auth via your token endpoint and try to send the token to the google/redirect path. You can work around this.

To do so, verify that the redirect uri is whitelisted in your google project console. You can view this via the API Access (where you would see client ID, client secret, as well as a list of redirect uris)

Upvotes: 1

Related Questions