rend.user.name在重新发送到模板时未定义

时间:2016-02-05 06:44:01

标签: mysql node.js authentication passport.js passport-local

我在 node.js 中使用通信 MySql 数据库对用户进行身份验证。身份验证成功完成,但当我从会话呈现 user.name 到主页时,它会给我 undefined 。我的代码如下:

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

我的home.ejs页面如下:

<% 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>
<%}%>

我不知道这里有什么问题。如果护照将用户设置为会话,那么为什么它没有在这里给出价值。

0 个答案:

没有答案