2017-06-15 65 views
1

我想向用戶顯示一個頁面(前端),它向他們顯示他們的登錄歷史,但有點困惑,需要一些幫助。使用快速會話和passport.js檢索以前的登錄

我使用Express和存儲我的會議中mongoStore這樣的:

app.use(session({ 
    secret: process.env.SECRET, 
    key: process.env.KEY, 
    resave: false, 
    saveUninitialized: false, 
    store: new MongoStore({ 
    mongooseConnection: mongoose.connection 
    }) 
})); 

和我的登錄策略是本地其中位於我UserController的文件是這樣的:

exports.login = passport.authenticate('local', { 
    failureRedirect: '/login', 
    failureFlash: 'Failed Login!', 
    successRedirect: '/', 
    successFlash: 'You are now logged in!' 
}); 

同時,我也有在我的處理程序中有一個助手函數,如下所示:

const passport = require('passport'); 
const mongoose = require('mongoose'); 
const User = mongoose.model('User'); 

const sess = passport.use(User.createStrategy()); // creates strategy during every user login 

passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser()); 

我知道我有在每個用戶登錄過程中創建一個令牌,但我相信已經使用序列化函數(在這種情況下,它是電子郵件)蠕變,但我怎麼跟蹤用戶,以便在他們的下一個會話期間,我可以檢索他們最後一次的日期登錄並呈現(顯示)給他們?身份驗證和登錄是完美的,我只需要知道我將如何顯示他們之前登錄的任何其他未來登錄時間,並點擊某個特定路線(而不是主頁)。在此先感謝

回答

0

你應該實現自定義身份驗證處理程序來存儲你所需要的數據,當用戶成功登錄,

Router.post('/login', (req, res, next)=>{ 
    passport.authenticate('local', function(err, user) { 
     if (err) { //do something when user failed to authenticate... } 
     if (!user) { //do something when user not found } 

     //explicitly call req.logIn, then save related information you need 
     req.logIn(user, function(err) { 
      if (err) { //do something when user failed to login } 

      //for example, save the current time to user collection 
      Users.updateLastLoginTime(user.id, Date.now()).then(function(){ 

       //when all set, send the response 
       return res.json(true); 
      }) 
     }); 
    })(req, res, next); 
})