使用Passport.js时如何在Handlebars布局模板中显示当前登录管理员
如何在Handlebars布局模板中显示当前登录管理员信息?
要在全局布局模板admin.handlebars里显示当前登录的管理员信息,你不用在每个路由里手动重复传递用户数据——用Express的res.locals就能轻松搞定,它的变量会自动在所有模板(包括布局)中生效。具体步骤如下:
第一步:添加全局中间件,挂载用户数据到res.locals
在你的Express应用中,注册一个全局中间件(注意要放在Passport初始化中间件之后、所有路由之前),这样每次请求都会自动检查登录状态,并把管理员信息存入全局模板变量:app.use((req, res, next) => { // 仅当用户已登录时,把管理员名称存入locals if (req.user) { res.locals.currentAdmin = req.user.adminname; } next(); });第二步:修改布局模板,直接调用变量
现在你可以在admin.handlebars里直接使用currentAdmin变量了,不用再单独给每个视图传值:<div class="admin-detail"> <p class="admin-name">{{ currentAdmin }}</p> <i class="admin-icon fas fa-chevron-down"></i> <div class="admin-actions"> <div class="admin-logout">Đăng xuất</div> </div> </div>
额外小提示:如果担心未登录时变量为空导致模板显示异常,可以加个Handlebars条件判断做兼容:
<p class="admin-name">{{#if currentAdmin}}{{ currentAdmin }}{{else}}未登录{{/if}}</p>
这样不管哪个路由使用这个布局模板,只要用户已登录,管理员名称都会自动显示出来,不用再在每个路由的render方法里重复传递CurentAdmin参数啦。
内容的提问来源于stack exchange,提问作者Thi Đình
相关产品推荐
相关产品推荐

