【发布时间】:2015-05-20 14:48:31
【问题描述】:
我正在尝试在节点项目中配置护照,我的登录和注册工作正常,但我无法将我的帐户对象传递给我的视图,以便我可以说“欢迎,名字”
我的护照登录策略返回账号如下:
passport.use('local-login', new LocalStrategy({
usernameField : 'username',
passwordField : 'password',
passReqToCallback : true
},
function(req, username, password, done){
process.nextTick(function(){
Account.findOne({'username' : username}, function(err, account){
if(err)
return done(err);
if(!account)
return done(null, false, req.flash('loginMessage', 'No user found.'));
if(!account.validPassword(password))
return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.'));
//console.log('email: ' + account.email);
return done(null, account);
});
});
}));
我使用该策略的路线是:
app.post('/', passport.authenticate('local-login', {
successRedirect : '/profile',
failureRedirect : '/',
failureFlash : true
}));
和个人资料路线:
app.get('/profile', isLoggedIn, function(req, res) {
var jaccount = JSON.stringify(req.account);
//console.log('email: ' + jaccount.email);
res.render('../app/views/profile/index.ejs', {
account : jaccount
});
});
和 isLoggedIn 函数:
function isLoggedIn(req, res, next){
if(req.isAuthenticated()){
return next();
}
res.redirect('/');
}
视图给出错误:
21| 22|
23|
24|无法读取未定义的属性“电子邮件”
任何帮助或建议将不胜感激,这是我的第一个节点项目,因此为愚蠢的错误道歉。
谢谢,
灰
【问题讨论】:
-
你用的是什么视图引擎?
-
你不需要
stringify它。护照还将用户会话添加到req.user而不是req.account。 -
使用stringify是因为我在网上看到了一些帖子并决定尝试一下,打算在发布之前将其取出。将 req.account 更改为 req.user 是一种享受。非常感谢!
-
您也无需在验证回调中使用
process.nextTick。 Jared 仅出于演示目的将其放入示例中。
标签: javascript node.js express passport.js