护照Facebook登录没有保存正确的ID到mongodb数据库

Passport Facebook login is not saving right ID to Mongo DB

本文关键字:ID mongodb 数据库 登录 Facebook 保存 护照      更新时间:2023-09-26

在添加数据库之前,我们的护照登录可以正常工作。

现在我们似乎正在保存一个不是facebook ID的ID它是保存_ID,我们不能检索facebook数据从我们的数据库。所以我猜问题是,它没有保存到数据库正确,但不知道为什么。

   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('/');
    });

Repo在分支上https://github.com/5-minute-catchup/ANEWREPO/tree/mongodb

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

    User.findOne({
                    facebookID: profile.id 
    }