2017-06-15 62 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); 
})