Обновление данных пользователя Facebook

Я пытаюсь найти способ обновления: "profile._json.friends.data" каждый раз, когда пользователь входит в систему (потому что он только поднимает и сохраняет список друзей в БД один раз при первом входе в систему).

Я слышал, что мы можем использовать:

findOneAndUpdate или Facebook Graph API (чтобы не приходилось обновлять)

но я не уверен, как я могу это сделать или если я начал правильный путь...

Я использую паспорт-фейсбук, mongodb / mongoose

Я надеюсь, что это будет достаточно понятно, не стесняйтесь, если у вас есть лучший способ сделать это!

Заранее спасибо!

// Passport configuration =====================================================
// used to serialize the user for the session
passport.serializeUser(function(user, done) {
    done(null, user.id);
});
// used to deserialize the user
passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user) {
        done(err, user);
    });
});
app.use(function(req, res, next){
   res.locals.currentUser = req.user; 
   next();
});
// =========================================================================
// FACEBOOK ================================================================
// =========================================================================
passport.use(new FacebookStrategy({
    // pull in our app id and secret from our auth.js file
    clientID        : configAuth.facebookAuth.clientID,
    clientSecret    : configAuth.facebookAuth.clientSecret,
    callbackURL     : configAuth.facebookAuth.callbackURL,
    profileFields   : configAuth.facebookAuth.profileFields
},
// facebook will send back the token and profile
function(token, refreshToken, profile, done) {
    // asynchronous
    process.nextTick(function() {
        // find the user in the database based on their facebook id
        User.findOne({ 'facebook.id' : profile.id }, function(err, user) {
            // if there is an error, stop everything and return that
            // ie an error connecting to the database
            if (err)
                return done(err);
            // if the user is found, then log them in
            if (user) {
                return done(null, user); // user found, return that user
            } else {
                // if there is no user found with that facebook id, create them
                var newUser            = new User();
                // set all of the facebook information in our user model
                newUser.facebook.id    = profile.id; // set the users facebook id                   
                newUser.facebook.token = token; // we will save the token that facebook provides to the user                    
                newUser.facebook.name  = profile.displayName; // pull name from profile displayName
                profile.emails ? newUser.facebook.email = profile.emails[0].value : newUser.facebook.email = "no email"; // if email isn't released from fb then set to "no email"
                profile.photos ? newUser.facebook.picture = profile.photos[0].value : '/img/faces/unknown-user-pic.jpg';
                newUser.facebook.gender = profile.gender;
                newUser.facebook.friends = profile._json.friends.data;
                // save our user to the database
                newUser.save(function(err) {
                    if (err)
                        throw err;
                    // if successful, return the new user
                    return done(null, newUser);
                });
            }
        });
    });
}));
app.get('/profile', isLoggedIn, function(req, res) {
    res.render('profile.ejs', {
        user : req.user // get the user out of session and pass to template
    });
});
// =====================================
// HOME PAGE ===========================
// =====================================
app.get('/', function(req, res) {
    res.render('landing'); // load the index.ejs file
});
// route for showing the profile page
app.get('/profile', isLoggedIn, function(req, res) {
    res.render('profile', {
        user : req.user // get the user out of session and pass to template
    });
});
// =====================================
// FACEBOOK ROUTES =====================
// =====================================
// route for facebook authentication and login
app.get('/auth/facebook', passport.authenticate('facebook', { authType: 'rerequest', scope : ['email', 'user_friends'] }));
// handle the callback after facebook has authenticated the user
app.get('/auth/facebook/callback',
    passport.authenticate('facebook', {
        successRedirect : '/profile',
        failureRedirect : '/'
    }));
// route for logging out
app.get('/logout', function(req, res) {
    req.logout();
    res.redirect('/');
});

0 ответов

Другие вопросы по тегам