#node.js #passport.js #ejs
Вопрос:
Я закодировал простой блог с node.js и использовал паспорт для аутентификации и ejs для движка просмотра, когда я вхожу в систему, некоторые ссылки на навигационную панель меняются, как и ожидалось, но странная вещь, когда я вхожу в систему с обычной вкладки chrome и обновляю сайт из другого окна chrome в режиме инкогнито или даже из другого браузера, например edge, я вижу зарегистрированную версию navbar, и я не входил в систему с edge или инкогнито в chrome вот мой код
HTML
<% if (!logedIn) { %>
<li><a href="/login" class="navlink">Login</a></li>
<li><a href="/register" class="navlink">Register</a></li>
<% } else { %>
<li><a href="/compose" class="navlink">New!</a></li>
<li><a href="/logout" class="navlink">LogOut</a></li>
<li><a href="/chat" class="navlink">ChatRoom</a></li>
<% } %>
сервер
app.get('/',function(req,res) {
if (req.isAuthenticated()) {
logedIn = true;
}
Post.find(function(err,posts) {
if(err){
console.log(err);;
} else {
res.render('home',{posts:posts,logedIn:logedIn})
}
})
})
Комментарии:
1. Оффтопик, но я бы предложил создать промежуточное программное обеспечение для
req.isAuthenticated()
Ответ №1:
Ваш код использует глобальную переменную logedIn
, поэтому, если один пользователь вошел в систему, он также обрабатывает всех других пользователей, вошедших в систему.
Чтобы исправить это, просто создайте logedIn
локальную переменную:
app.get('/',function(req,res) {
// define variables using keywords like var, let, const, etc. Omitting them may create unwanted global variables.
let logedIn = false;
if (req.isAuthenticated()) {
logedIn = true;
}
Post.find(function(err,posts) {
if(err){
console.log(err);;
} else {
res.render('home',{posts:posts,logedIn:logedIn})
}
})
})