我使用 Handlebars(使用express3-handlebars)作为模板,使用 Passport 在 NodeJS 应用程序中进行身份验证。一切都很好,但我想知道是否有一种方法可以将 Passport 创建的 req.user 对象全局传递到 Handlebars。
所以我的标题部分可能看起来像这样:
<header>
<h1>My Title</h1>
{{#if user}}
<p>Hello {{user.name}}</p>
{{else}}
<p>Please <a href='/login'>Log In</a></p>
{{/if}}
</header>
按照目前的情况,我必须在每个页面渲染时显式传递用户对象:
app.get('/', function(req, res){
res.render('home', {
page_title: 'welcome',
user: req.user
});
});
这似乎是错误的方法,因为我在每个页面上都需要它,我是否可以只设置一次并让所有页面都可以访问它?
当我实例化 Handlebars 时,我无法执行此操作,因为它依赖于使用 Passport 登录的用户,但情况并非总是如此。
创建一个全局“page_options”对象,将其附加并传递给每个渲染是否是正确的解决方案,或者 Handlebars/Express 是否有办法处理这个问题?
我之前没有亲自使用过 Passport,但根据 Passport README 以及我对其他身份验证方案所做的操作,这应该可行。
快车3
app.configure(function() {
app.use(passport.initialize());
app.use(passport.session());
app.use(function(req, res, next) {
res.locals.user = req.user; // This is the important line
next();
});
app.use(app.router);
});
快车4
app.use(passport.initialize());
app.use(passport.session());
app.use(function(req, res, next) {
res.locals.user = req.user; // This is the important line
next();
});
基本上,在渲染之前,您的app.locals
, res.locals
,以及您传递到渲染函数(第二个参数)的局部变量都将被组合并传递到您的视图引擎。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)