【发布时间】:2018-06-10 02:33:07
【问题描述】:
我有一个 node.js 和 express 应用程序,在我的用户模型中有一个布尔字段 isAdmin。我想要做的是根据登录用户是否是管理员来隐藏导航中的某些元素。我写了两个助手 auth.js 检查用户是否登录,以下是代码:
module.exports = {
ensureAuthenticated: function (req, res, next) {
if (req.isAuthenticated()) {
return next();
}
req.flash('error_msg', 'Not Authorized');
res.redirect('/login');
}
}
另一个助手是 adminCheck.js,它检查用户是否是管理员:
module.exports = {
adminUser: function (req, res, next) {
if (req.user.isAdmin) {
return next();
}
req.flash('error_msg', 'You have tried to access a restricted space. As a result you have been logged out!');
res.redirect('/logout');
}
}
对于我的管理相关路线,我成功地使用了这些助手,如下所示:
// admin index route
router.get('/', [ensureAuthenticated, adminUser], (req, res) => {
res.render('admin/index');
});
但问题是我的 html,在导航中我可以根据用户是否登录来隐藏某些元素:
{{#if user}}
<div class="col-md-2">
<ul class="list-inline sm-pull-none sm-text-center text-right text-white mb-sm-20 mt-10">
<li class="m-0 pl-10">
<a href="/logout" class="text-white">
<i class="fa fa-user-o mr-5 text-white"></i> logout</a>
</li>
<li class="m-0 pl-10">
<a href="/admin" class="text-white">
<i class="fa fa-user-o mr-5 text-white"></i> Admin</a>
</li>
</ul>
</div>
{{else}}
<div class="col-md-2">
<ul class="list-inline sm-pull-none sm-text-center text-right text-white mb-sm-20 mt-10">
<li class="m-0 pl-10">
<a href="/login" class="text-white">
<i class="fa fa-user-o mr-5 text-white"></i> Login /</a>
</li>
<li class="m-0 pl-0 pr-10">
<a href="/register" class="text-white">
<i class="fa fa-edit mr-5 text-white"></i>Register</a>
</li>
</ul>
</div>
{{/if}}
正如您在上面的 html 中看到的,有一个指向管理员的链接,我想根据登录的用户隐藏它,我该怎么做?什么是自定义帮助代码来实现这一点?
提前致谢。
【问题讨论】:
标签: node.js express handlebars.js