Search code examples
node.jspassport.jsmean-stackpassport-google-oauth

Need help debugging my webapp in nodejs


I am using google outh2 in nodejs with help of passport.js by developing google strategy . But issues comes here when i use console.log any where in the code in any file whatever file is it in web app directory its working. But when i use my console.log in this function nothing is being executed neither i am able to fetch user data nor able to execute console.log to just display a message in console, when executed inside this code

(accessToken, refreshToken, profile, done) => {
console.log('data');
})

Full code is here: File : passport-setup.js

var passport = require('passport');
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
passport.use(new GoogleStrategy({
    clientID: "",
    clientSecret: "",
    callbackURL: "http://127.0.0.1:3000/auth/google/redirect"
  },
  function(accessToken, refreshToken, profile, done) {

  console.log('logineed');
  }
));

Route: index.js

var express = require('express');
var passport = require('passport');
var router = express.Router();

router.get('/login', function(req, res, next) {
  res.render('index', { title: 'Login' });
});
router.get('/google',passport.authenticate('google', { scope: ['profile'] }));

router.get('/google/redirect',  function(req,res){
    res.redirect('/app');
});
router.get('/app',function(req,res){
  res.send('Your are in');
});
module.exports = router;

Entry point: app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var passportConfig = require('./config/passport-setup');
var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/auth', indexRouter);
app.use('/app', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

Solution

  • The problem was with code

    router.get('/google/redirect',  function(req,res){
        res.redirect('/app');
    });
    

    in router.js file

    It should we written as

    router.get('/google/redirect', passport.authenticate('google'),  function(req,res){
        res.redirect('/app');
    });
    

    Because what happens is at time of login , before redirection of link happens the google data of that person is accessible. But after the redirection all the data access to google account data is lost. To access it again we will call authenticate function of passport with google strategy which will load the google user data. As given in code above