паспорт странное поведение при авторизации

#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})
        }
    })
})