gpt4 book ai didi

javascript - 嵌入式 JS 部分 - 确定用户是否已登录

转载 作者:行者123 更新时间:2023-11-29 21:34:54 25 4
gpt4 key购买 nike

我正在尝试在 nodejs 中设置用户身份验证。我使用嵌入式 js 作为 View 引擎。

我正在尝试为用户是否登录显示不同的模板。我查看此页面以确定用户是否已登录

How to know if user is logged in with passport.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>

这是我的 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('/');
}

};

我重新加载了服务器,发现请求未定义。

问题似乎是在我的 header 部分中包含了这个变量。

最佳答案

为了向您的模板公开一个变量,您必须传递它。例如

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

以上将向模板公开req。但是,您不应该将完整的 req 对象暴露给模板。您可以简单地传递一个对象,其中包含您希望在特定模板中拥有的所有属性。

例如

{ loggedin: true, username: 'someone' }

或以上几行中的内容。

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

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

关于javascript - 嵌入式 JS 部分 - 确定用户是否已登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35117454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com