将req.user传递到模板不能与ejs和express一起使用

时间:2018-08-10 02:17:00

标签: node.js express ejs

我正在使用EJS和Express来检查当前用户是否存在,以及是否不显示其他内容。我的问题是我将req.user设置为res.locals.currentUser,但是它没有传递到模板,因此我可以输出它以及检查它是否存在。

在我的app.js中

app.use(function(req, res, next){
   res.locals.currentUser = req.user;
   next();
});

我的ejs文件

<% if(!currentUser){ %>
    <li><a href="/login">Login</a></li>
    <li><a href="/register">Sign Up</a></li>
<% } else { %>
    <li><a href="#">Signed In As <%= currentUser.email %></a></li>
    <li><a href="/profile">Profile</a></li>
    <li><a href="/logout">Logout</a></li>
<% } %>

这总是计算为false,因此显示if语句的第一部分。

这里是什么问题,所以我无法在ejs视图中测试或查看用户数据?当我console.log时,currentUser返回未定义。

一些可能很重要的信息,我使用的是Redis会话存储而不是mongo存储。我也使用body解析器,而不是cookieparser。

1 个答案:

答案 0 :(得分:0)

在带有 ejs 模板的 node.js 中使用 Passport 时,我遇到了同样的问题。

解决方案是将其放在护照代码行下方(即序列化和反序列化)。 这些函数负责将用户保存到“req.user”,因此如果 app.use 放在它上面,代码将无法工作,因为 req.user 在此之前为 null。

阿迪斯