我在 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>
<%}%>
我不知道这里有什么问题。如果护照将用户设置为会话,那么为什么它没有在这里给出价值。