身份验证中的护照奇怪行为

passport odd behavior in auth

我用 node.js 编写了一个简单的博客,并使用 passport 进行身份验证,使用 ejs 进行视图引擎 当我登录某些导航栏时 link 按预期更改但奇怪的是当我从正常 chrome 选项卡登录时,并从另一个 chrome 隐身 window 甚至另一个浏览器刷新站点例如边缘,我看到导航栏的登录版本,我没有从边缘或隐身登录 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})
        }
    })
})

您的代码使用全局变量 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})
        }
    })
})