NodeJS 我收到“引用错误:用户未定义”当我删除我的jwt令牌时

4sup72z8  于 2023-03-12  发布在  Node.js
关注(0)|答案(2)|浏览(109)

我想用我的express-ejs模板,用jwt做一个认证系统。我创建了一个cookie,我在cookie部分看到它,我把它发送到前端。当cookie存在时,我可以成功地在屏幕上写它,但出于测试的原因,为了看看当用户离线时会发生什么,我删除了cookie,我得到了引用错误。
我尝试有条件地将用户数据写成这样:

<% if (!user) { %>
        <h2> Hello Guest! </h2>
    <% } else { %>
        <h2> Hello <%= user.username %></h2>
    <% } %>

但是我在第一行得到了这个错误。我什么都不明白,我已经试着检查它是否未定义,但是把我检查的错误。我把那个cookie的“HTTPOnly”属性设置为“true”,我不知道是不是因为这个。当那个cookie存在时,ejs呈现那个cookie的信息,但是当它不存在时,它不检查它是否未定义。
我发送用户到前端与此代码:
enter image description here

server.get("/", function(req, res, next){
if(!req.headers.cookie){
    res.render("home")
} else{
    console.log("headers:", req.headers.cookie.split("=")[1]);
    console.log("jwt decoding:", jwt.decode(req.headers.cookie.split("=")[1]))
    let user = jwt.decode(req.headers.cookie.split("=")[1])
    res.render("home", { user });
}

});

pb3skfrl

pb3skfrl1#

您仍然需要将变量传递给视图,但将其保留为空:

server.get("/", function(req, res, next){
if(!req.headers.cookie){
    res.render("home", { user: null })
} else{
    console.log("headers:", req.headers.cookie.split("=")[1]);
    console.log("jwt decoding:", jwt.decode(req.headers.cookie.split("=")[1]))
    let user = jwt.decode(req.headers.cookie.split("=")[1])
    res.render("home", { user });
}
oug3syen

oug3syen2#

您似乎没有将名为“user”的变量传递给EJS模板。
你可以检查变量是否存在,如下所示:

<% if (typeof(user) === 'undefined') { %>
    <h2> Hello Guest! </h2>
<% } else { %>
    <h2> Hello <%= user.username %></h2>
<% } %>

相关问题