Mysql req.user.name在渲染到模板时未定义

Mysql req.user.name在渲染到模板时未定义,mysql,node.js,authentication,passport.js,passport-local,Mysql,Node.js,Authentication,Passport.js,Passport Local,我正在使用node.js中的passport和MySql数据库对用户进行身份验证。身份验证已成功完成,但当我将user.name从会话呈现到主页时,未定义。我的代码如下: router.get('/login', function(req, res, next) { res.render('login'); }); router.get('/home', function(req, res, next) { console.log("User name " + user.name);

我正在使用node.js中的passportMySql数据库对用户进行身份验证。身份验证已成功完成,但当我将user.name会话呈现到主页时,未定义。我的代码如下:

router.get('/login', function(req, res, next) {
  res.render('login');
});

router.get('/home', function(req, res, next) {
  console.log("User name " + user.name); //**undefined**
  res.render('home', {
    isAuthenticated: req.isAuthenticated(),
    user: req.user
  });
});

passport.serializeUser(function(user, done) {
  console.log("serializing " + user.name);
  done(null, user);
});

passport.deserializeUser(function(user, done) {
  console.log("Deserializing " + user.name);
    employeeDao.getUserById(user.id, function(err, user) {
      done(err, user);
    });
});

passport.use(new LocalStrategy({
      usernameField: 'userID',
      passwordField: 'pwd'
    },
    function(username, password, done) {
      employeeDao.userByUsername(username, function(err,user) {
        if(err)
        {
          return done(err);
        }
        if(!user.length)
        {
          console.log("Not User");
          return done(null, false, {message: 'Incorrect user name'});
        }
        if(user[0].password != password)
        {
          console.log("Incorrect Password");
          return done(null, false, {message: 'Incorrect password'});
        }
        return done(null, user[0]);
      });
    }
));

router.post('/login',passport.authenticate('local', {failureRedirect:'/login'}), function(req, res, next) {
  res.redirect('/home');
}); 
<% if(!isAuthenticated){%>
    <a href="login">Login here</a>
<%} else {%>
<div class="container-fluid">
    <div class="container">
        <div class="main">
            Hello, <%=user.name%>
        </div>
    </div>
</div>
<%}%>
我的home.ejs页面如下:

router.get('/login', function(req, res, next) {
  res.render('login');
});

router.get('/home', function(req, res, next) {
  console.log("User name " + user.name); //**undefined**
  res.render('home', {
    isAuthenticated: req.isAuthenticated(),
    user: req.user
  });
});

passport.serializeUser(function(user, done) {
  console.log("serializing " + user.name);
  done(null, user);
});

passport.deserializeUser(function(user, done) {
  console.log("Deserializing " + user.name);
    employeeDao.getUserById(user.id, function(err, user) {
      done(err, user);
    });
});

passport.use(new LocalStrategy({
      usernameField: 'userID',
      passwordField: 'pwd'
    },
    function(username, password, done) {
      employeeDao.userByUsername(username, function(err,user) {
        if(err)
        {
          return done(err);
        }
        if(!user.length)
        {
          console.log("Not User");
          return done(null, false, {message: 'Incorrect user name'});
        }
        if(user[0].password != password)
        {
          console.log("Incorrect Password");
          return done(null, false, {message: 'Incorrect password'});
        }
        return done(null, user[0]);
      });
    }
));

router.post('/login',passport.authenticate('local', {failureRedirect:'/login'}), function(req, res, next) {
  res.redirect('/home');
}); 
<% if(!isAuthenticated){%>
    <a href="login">Login here</a>
<%} else {%>
<div class="container-fluid">
    <div class="container">
        <div class="main">
            Hello, <%=user.name%>
        </div>
    </div>
</div>
<%}%>

你好
我不明白这里出了什么问题。如果passport在会话中设置用户,那么为什么它不在这里赋值。

我用于此req.session.passport.user。嗯,我不知道这是不是正确的方法,但它对我有效。显然,用户在那里是未定义的,您可以使用req.user访问登录的用户。serializeUser()和deserializeUser()将用户详细信息存储在用于此req.session.passport.user的req.userI中。嗯,我不知道这是不是正确的方法,但它对我有效。显然,用户在那里是未定义的,您可以使用req.user访问登录的用户。serializeUser()和deserializeUser()将用户详细信息存储在req.user中