Mysql req.user.name在渲染到模板时未定义
我正在使用node.js中的passport和MySql数据库对用户进行身份验证。身份验证已成功完成,但当我将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);
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中