身份验证中的护照奇怪行为
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})
}
})
})
我用 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})
}
})
})