Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Missing required parameter: redirect_uri with passport-google-oauth

Using passport-google-oauth: "0.2.0" in my MEAN Stack application (found here: https://github.com/jaredhanson/passport-google-oauth). When I run the application and attempt to sign in with a Google API this error is returned

  1. That’s an error.

Error: invalid_request

Missing required parameter: redirect_uri

Request Details scope=https://www.googleapis.com/auth/plus.login response_type=code redirect_uri= client_id=xxxx-xxxx.apps.googleusercontent.com

The redirect param is here passport-init.js

var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;

var GOOGLE_CLIENT_ID = "xxx-xxx.apps.googleusercontent.com"; var GOOGLE_CLIENT_SECRET = "xxxx";

passport.use(new GoogleStrategy({
clientID: GOOGLE_CLIENT_ID,
clientSecret: GOOGLE_CLIENT_SECRET,
callbackUrl: "http://127.0.0.1:3000/auth/google/oauth2callback" }, function(accessToken, refreshToken, profile, done){ done(null,profile); } ));

The routes are here authenticate.js

router.get('/google', passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/plus.login']}), function (req, res){ });

router.get('/google/oauth2callback', passport.authenticate('google', { successRedirect: '/auth/success', failureRedirect: '/auth/failure' }) , function (req, res) {res.redirect('/');} );

I am sure I am missing something simple, but I don't know what to add in this question that will give you the best information. Please ask and I will do my best to answer you. This is what feels like the pertinent data.

Funny thing is if I add the callbackUrl manually then everything works great. I can reach the Google API fine. Then I am given the choice to "allow" or "deny" the request.

like image 448
Trewaters Avatar asked Oct 03 '15 16:10

Trewaters


People also ask

How to update redirect URIs in Google Developer Console?

Here are the step-by-step screenshots of Google Developer Console so that it would be helpful for those who are getting it difficult to locate the developer console page to update redirect URIs. Click on Credentials menu. And under OAuth 2.0 Client IDs, you will find your client name. In my case, it is Web Client 1.

What should the final result of my Google oAuth configuration page look like?

The final result will look something like this: Additionally, you should confirm that your Google OAuth configuration page contains the Custom URL Base, plus /api/oauth2/loginResponse included in its Authorized redirect URIs. For example:

Why is the parameter value for redirect_Uri invalid?

Invalid parameter value for redirect_uri: Missing scheme: /api/oauth2/loginResponse. This can occur because the redirect_uri does not contain the full URL. This can be resolved by configuring your Custom URL Base per the instructions provided HERE. The final result will look something like this:

How to use googlestrategy within passport?

I use something like that- 1. Make sure that's URL and not uri. 2. Make sure the callback URL you registered is same as the one you are requesting for. var passport = require ('passport'); var GoogleStrategy = require ('passport-google-oauth').OAuth2Strategy; // Use the GoogleStrategy within Passport.


2 Answers

When defining the GoogleStrategy, the JSON key should be callbackURL instead of callbackUrl (i.e., capital URL). Had this 'issue' as well ;-)

like image 94
Philip Huysmans Avatar answered Sep 29 '22 00:09

Philip Huysmans


I use something like that- 1. Make sure that's URL and not uri. 2. Make sure the callback URL you registered is same as the one you are requesting for.


var passport = require('passport');
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;

// Use the GoogleStrategy within Passport.
//   Strategies in Passport require a `verify` function, which accept
//   credentials (in this case, an accessToken, refreshToken, and Google
//   profile), and invoke a callback with a user object.
passport.use(new GoogleStrategy({
    clientID: GOOGLE_CLIENT_ID,
    clientSecret: GOOGLE_CLIENT_SECRET,
    callbackURL: "http://www.example.com/auth/google/callback"
    //should be same as the one you registered in credentials.
  },
  function(accessToken, refreshToken, profile, done) {
       User.findOrCreate({ googleId: profile.id }, function (err, user) {
         return done(err, user);
       });
  }
));

P.S:my first one on stackoverflow. please ignore mistakes and help me in improving.

like image 30
Saurabh Chaubey Avatar answered Sep 29 '22 01:09

Saurabh Chaubey