我正在尝试在nodejs中设置用户身份验证。我正在使用嵌入式js作为视图引擎。
我正在尝试显示一个不同的模板,以确定用户是否已登录。我查看了此页面以确定用户是否已登录
如何知道用户是否使用护照登录.js?
在标题部分,我希望用户只有在未登录的情况下才能看到登录和注册链接。我包括了这个 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>
这是我的路线.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('/');
}
};
我重新加载了服务器,并得到未定义的 req。
问题似乎是在我的标头部分中包含此变量。
为了向模板公开变量,您必须传递它。例如
res.render(path.resolve('shapes/index'), {req: req});
以上内容会将req
公开给模板。但是,不应向模板公开完整的 req 对象。您可以简单地传递一个对象,其中包含您希望在特定模板中拥有的所有属性。
例如
{ loggedin: true, username: 'someone' }
或上面几行中的内容。
然后在您的模板中,您可以检查
if (!loggedin) {
// show here the login and register partial, etc.
}