我一直在用Passport,Express 4和Jade创建一个应用程序.我想向用户显示一个在登录时更改的导航栏.
但是,我无法访问req.user以查找除了调用isLoggedIn的配置文件页面之外的任何其他页面:
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("/login")
}
Run Code Online (Sandbox Code Playgroud)
使用任何其他功能在未登录时不重定向用户会导致req.user正在运行undefined.我得到这样的用户:
router.get("/profile", isLoggedIn, function(req, res) {
res.render("profile", {
title: 'Gebruikersprofiel van ' + req.user.firstname + " " + req.user.lastname,
user: req.user // get the user out of session and pass to template
})
})
Run Code Online (Sandbox Code Playgroud)
并且没有调用isLoggedIn(这不起作用):
router.get("/", function(req, res) {
// serve index.html
res.render("index", { …Run Code Online (Sandbox Code Playgroud) 我尝试在 EJS 上使用我的局部变量。它只是一个检查用户是否已连接的变量。-> 就像此链接上的最后一篇文章一样: 如何知道用户是否使用 Passport.js 登录?
所以,
应用程序.js
app.use(function (req, res, next) {
res.locals.login = req.isAuthenticated();
next();
});
Run Code Online (Sandbox Code Playgroud)
查看EJS
<% if (login) { %>
<div id="subMenuUser">
<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
</span>Menu<span class="caret"></span>
</button>
<ul class="dropdown-menu pull-right" role="menu">
<li><a href="#" role="menuitem">Menu Item 1</a></li>
<li><a href="#" role="menuitem">Menu Item 2</a></li>
<li><a href="#" role="menuitem">Menu Item 3</a></li>
</ul>
</div>
</div>
<% } %>
Run Code Online (Sandbox Code Playgroud)
我收到错误:
login is not defined
Run Code Online (Sandbox Code Playgroud)
我想在所有视图中使用这个变量..可能吗?
在使用此方法之前,我每次都会在渲染中发送变量,如下所示:
res.render('ad/index', { login: req.session.user });
Run Code Online (Sandbox Code Playgroud)