Passport Facebook login does not store correct id for Mongo DB

our passport login worked great before we added the database.

Now we seem to be storing an id which is not the facebook id it is storing the _ID and we cannot fetch data from facebook from our database. So I guess the problem is that it is not saving the database correctly, but not sure why.

   passport.serializeUser(function(user, done) {
     console.log('serializeUser: ' + user.id)
      done(null, user.id);
    });

    passport.deserializeUser(function(id, done) {
      console.log(id)
      User.findById(id, function(err, user){
         console.log(user)
         if(!err) done(null, user);
         else done(err, null)
     })
    });

    var sessionData = session({
      store: sessionStore.createSessionStore(),
      secret: "your_secret",
      cookie: { maxAge: 2628000000 },
      resave: true,
      saveUninitialized: true
    });

    passport.use(new FacebookStrategy({
        clientID: FACEBOOK_APP_ID,
        clientSecret: FACEBOOK_APP_SECRET,
        callbackURL: "/auth/facebook/callback",
        profileFields: ['id', 'name'],
        enableProof: false
      },
      function(accessToken, refreshToken, profile, done) {
        console.log("accesstoken: " + accessToken + "refreshToken " + refreshToken + "profile: " + profile.id + "done:" + done)
         User.findOne({
                'facebook.id': profile.id 
            }, function(err, user) {
                if (err) {
                    return done(err);
                }
                if (!user) {
                   user = new User({
                   facebookID: profile.id,
                   name: profile.displayName,
                    provider: 'facebook',
                    facebook: profile._json
                    });
                    user.save(function(err) {
                        if (err) console.log(err);
                        return done(err, user);
                    });
                } else {
                    //found user. Return
                    return done(err, user);
                }
            });
      }
    ));

    var app = express();

      app.set('views', __dirname + '/app/views');
      app.set('view engine', 'ejs');
      app.use(sessionData);
      app.use(logger("combined"));
      app.use(cookieParser());
      app.use(bodyParser.json());
      app.use(bodyParser.urlencoded({
        extended: true
      }));
      app.use(methodOverride());
      app.use(session({
          secret: "keyboard cat",
          saveUninitialized: true, // (default: true)
          resave: true, // (default: true)
        }));
      app.use(passport.initialize());
      app.use(passport.session());
      app.use(express.static(__dirname + '/app/public'));
      app.use(express.static(__dirname + '/'));

      var http    = require('http');
          server  = http.createServer(app);
          io      = require('socket.io')(server);


    app.get('/', function(req, res){
      res.render('index', { user: req.user });
    });

    app.get('/account', ensureAuthenticated, function(req, res){
        User.findById(req.session.passport.user, function(err, user) {
       if(err) {
         console.log(err);
       } else {
         res.render('account', { user: user});
       }
      });
    });

    app.get('/login', function(req, res){
      res.render('login', { user: req.user });
    });

    app.get('/auth/facebook',
      passport.authenticate('facebook'));

    app.get('/auth/facebook/callback',
      passport.authenticate('facebook', { failureRedirect: '/login' }),
      function(req, res) {
        res.redirect('/');
      });

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

      

The repo is on the branch https://github.com/5-minute-catchup/ANEWREPO/tree/mongodb

+3


source to share


1 answer


    User.findOne({
                    'facebook.id': profile.id 
    }

      

Should be:



    User.findOne({
                    facebookID: profile.id 
    }

      

+4


source







All Articles