【发布时间】:2014-04-07 17:55:58
【问题描述】:
我有一些登录页面,一旦认证成功,在下一页,我应该显示登录详细信息..(即用户名和密码)
我正在使用 Express NodeJs、Passport、connect-flash、mongoose
我的问题是:我无法理解如何在下一个呈现的页面中检索用户名、密码..
请有人建议我如何实现它。我不是在问你代码,而是告诉我一种获取输出的方法。
编辑:
app.js
var http = require('http');
var express = require('express'),
passport = require('passport')
, LocalStrategy = require('passport-local').Strategy,
flash = require('connect-flash'),
User = require('./routes/userdao.js');
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ uname: username ,pwd:password}, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
return done(null, user);
});
}
));
passport.serializeUser(function(user, done) {
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
var app = express();
app.configure(function(){
app.use(express.logger('dev')); /* 'default', 'short', 'tiny', 'dev' */
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.session({ secret: 'mysecret' }));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.engine('.html', require('ejs').__express);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
app.use(app.router);
// app.use(express.errorHandler());
}).listen(3000);
console.log('Listening on port 3000...');
app.get('/',function(req,res){
/* req.flash('info', 'Flash is back!')
res.redirect('/success');*/
res.render('home.ejs');
});
app.get('/login',function(req,res){
res.render('login.ejs');
});
app.get('/success',function(req,res){
res.render('success.ejs',{ uname : req.user.username });
});
app.post('/login',
passport.authenticate('local', { successRedirect: '/success', failureRedirect: '/login',
failureFlash: true }));
success.ejs
<%= uname %>
我正在尝试显示我在登录页面中输入的用户名。我得到输出:undefined
请告诉我出了什么问题以及我需要纠正什么?
【问题讨论】:
-
您能否添加您可能正在使用的任何会话中间件以及您如何配置 Passport 中间件。查看此链接passportjs.org/guide/configure,尤其是中间件和会话部分。假设您打算使用会话来存储登录数据,您需要告诉 Passport 如何做到这一点。
-
@MattPileggi 我添加了完整代码,请您现在查看!
-
谢谢。只是为了解决一个简单的问题:你确定你的 req.user 对象有一个属性“用户名”吗?当您执行 findOne 时,您正在查询 { uname: username } 所以我假设您应该为您的视图设置 { uname: req.user.uname }。
-
@MattPileggi 嗨兄弟,用户名和密码值将在提交时从登录表单中获取!因此,这意味着仅从请求中获取值!
-
在您的 /success 处理程序内部,因为它是一个重定向,所以 req.user 将是您序列化/反序列化的对象。所以 req.user.username 将是未定义的,除非你的用户对象有 { username: 'Bob' },而看起来你的数据模型实际上有 { uname: 'Bob' }
标签: node.js express mongoose passport.js