【问题标题】:Can't pass object to view in nodejs/express无法在 nodejs/express 中传递对象以查看
【发布时间】: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


【解决方案1】:

将实际对象传递给视图,而不是通过JSON.stringify() 运行它:

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 : req.account
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多