embedded式JS Partials – 确定用户是否已login

我正在尝试在nodejs中设置用户authentication。 我使用embedded式js作为视图引擎。

我正试图显示一个不同的模板,用户是否login。 我查看了此页面以确定用户是否已login

如何知道用户是否使用passport.jslogin?

在标题部分,我希望用户只能看到login和注册链接,如果他们没有login。我包括这个ejs。

<header> <% include header %> </header> 

然后在我的标题部分,我有这个

 <ul class="nav navbar-nav"> <% if (!req.user) {%> <li><a href='login.ejs'>Login</a></li> <li><a href='register.ejs'>Register</a></li> <% } %> </ul> 

这是我的routes.js文件

 module.exports = function(app) { app.set('view engine', 'ejs'); app.use(express.static(path.resolve('shapes'))); app.get('/', function(req, res) { res.render(path.resolve('shapes/index')); }); passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(user, done) { done(null, user); }); passport.use(new LocalStrategy(function(username, password, done) { process.nextTick(function() { UserDetails.findOne({ 'username': username, }, function(err, user) { if (err) { return done(err); } if (!user) { return done(null, false); } if (user.password != password) { return done(null, false); } return done(null, user); }); }); })); app.get('/login', function(req, res) { res.sendFile(path.resolve('shapes/login.ejs')); }); app.get('/register', function(req, res) { res.sendFile(path.resolve('shapes/register.ejs')); }); app.post('/login', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' })); app.get('/logout', function(req, res){ req.logout(); res.redirect('/'); }); function isLoggedIn(req, res, next) { // if user is authenticated in the session, carry on if (req.isAuthenticated()) return next(); // if they aren't redirect them to the home page res.redirect('/'); } }; 

我重新加载服务器,并得到该请求没有定义。

问题似乎是在我的标题部分包含这个variables。

为了将variables暴露给你的模板,你必须通过它。 例如

 res.render(path.resolve('shapes/index'), {req: req}); 

以上将暴露req的模板。 但是,您不应将完整的req对象暴露给模板。 您可以简单地传递一个对象,使其具有您想要的特定模板中的所有属性。

例如

 { loggedin: true, username: 'someone' } 

或者在上面的行中。

然后在你的模板中,你可以检查

 if (!loggedin) { // show here the login and register partial, etc. }