【发布时间】:2021-05-24 18:43:06
【问题描述】:
我正在尝试设置查看页面以在登录时在页面上显示经过身份验证的用户的信息,例如用户名或电子邮件。
为此,我使用 res.locals 函数在全局级别设置用户数据以供页面访问。
const jwt = require("jsonwebtoken")
const User = require("../models/User")
const checkUser = (req, res, next) => {
const token = req.cookies.jwt
if (token) {
jwt.verify(token, "Company_Special_Code", async (err, decodedToken) => {
if (err) {
res.locals.user = null // Set it to null if the user does not exist
next();
} else {
let user = await User.findById(decodedToken.id)
res.locals.user = user
next();
}
})
} else {
res.locals.user = null
next();
}
}
module.exports = {
checkUser
}
第一个代码,每次代码到达端点时我都会调用 next() 函数,它允许页面访问用户信息而不会出现任何错误。
但是,如果我在 checkUser() 函数的最底部只调用一次 next() 函数,则会导致错误,声称用户未在视图页面级别定义。代码如下:
const jwt = require("jsonwebtoken")
const User = require("../models/User")
const checkUser = (req, res, next) => {
const token = req.cookies.jwt
if (token) {
jwt.verify(token, "Company_Special_Code", async (err, decodedToken) => {
if (err) {
res.locals.user = null // Set it to null if the user does not exist
} else {
let user = await User.findById(decodedToken.id)
res.locals.user = user
}
})
} else {
res.locals.user = null
}
next();
}
module.exports = {
checkUser
}
如果我对函数进行了正确编码,无论 jwt 令牌的状态如何,或者令牌验证过程中是否出现错误,checkUser() 函数都应该到达底部的 next() 函数。如果您能告诉我我在这里做错了什么,我将非常感谢您的帮助...
【问题讨论】:
标签: node.js express cookies jwt