I have the following Node code using passport-google-oauth...
app.get('/auth/google', passport.authenticate('google', { scope : ['profile', 'email'] }));
app.get('/auth/google/callback', function(req,res) {
console.log("callback");
passport.authenticate('google', {
successRedirect : '/signin',
failureRedirect : '/signin'
});
});
and...
passport.serializeUser(function(user, done) {
console.log("ser");
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
console.log("des");
User.findById(id, function(err, user) {
done(err, user);
});
});
passport.use(new GoogleStrategy({
clientID : 'id',
clientSecret : 'key',
callbackURL : 'http://host/auth/google/callback',
},
function(token, rtoken, profile, done) {
console.log("proc");
console.log(profile);
done(null, profile);
}));
The problem is, the callback is getting called but nothing else happens. The processing function never hits. The callback ends up timing out. Any ideas where I went wrong?
i just found out that passport-google-oauth package exports the following:
exports.Strategy =
exports.OAuthStrategy = OAuthStrategy;
exports.OAuth2Strategy = OAuth2Strategy;
which means, that the "default" (ie. Strategy) is not oauth2 at all... So you better use OAuth2Strategy explicitly. it worked for me. Took me hours to find out this was the problem...
You didn't use "passport.authenticate('google')" middleware inside the second route '/auth/google/callback'.
your second route should be like :
app.get( '/auth/google/callback',
passport.authenticate( 'google', {
successRedirect: '/',
failureRedirect: '/login'
}));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With