Search code examples
node.jspassport-google-oauth

How to Get user Email Address using OAuth in Node js


I am writing a code to add functionality of logging in with Google. I have written code but when a user log in with google, it only gives me id, name, fullname etc. It does not provide with user email address. Can any one help me to solve this? Following is my code

passport.use(new GoogleStrategy({
    clientID: CLIENT_ID,
    clientSecret: CLIENT_SECRET,
    callbackURL: "http://localhost:8000/auth/google/notepad"
  },
  function(accessToken, refreshToken, profile, cb) {
    console.log(profile);
    User.findOrCreate({ googleId: profile.id }, function (err, user) {
      return cb(err, user);
    });
  }
));


router.get('/auth/google', passport.authenticate('google',{scope: ['profile']}));
router.get('/auth/google/notepad', 
  passport.authenticate('google', { failureRedirect: '/' }),
  async function(req, res) {
    const token = await req.user.generateAuthToken();
    res.cookie('authToken', token);
    res.redirect('/')
  });

Solution

  • You are missing the email scope. It’s a separate scope to their profile.

    See the docs too if you want to know more: https://developers.google.com/identity/protocols/oauth2/openid-connect#scope-param