Node.js nodejs在登录时向所有页面显示用户名
我只是在node.js中体验了一下,感觉有点困惑。我想在登录时向所有页面显示用户名。我可以使用jsonwebtoken获取用户id。我正在使用MySQL。这是我的路线Node.js nodejs在登录时向所有页面显示用户名,node.js,express,jwt,middleware,Node.js,Express,Jwt,Middleware,我只是在node.js中体验了一下,感觉有点困惑。我想在登录时向所有页面显示用户名。我可以使用jsonwebtoken获取用户id。我正在使用MySQL。这是我的路线 const express = require('express'); const router = express.Router(); const { requireAuth, checkUser } = require('../middleware/authMiddleware'); router.get('*', chec
const express = require('express');
const router = express.Router();
const { requireAuth, checkUser } = require('../middleware/authMiddleware');
router.get('*', checkUser);
router.get('/', (req, res) => {
res.render('index');
});
我在这里编写了中间件代码
const checkUser = (req, res, next)=>{
const token = req.cookies.jwt;
if(token){
jwt.verify(token, process.env.JWT_SECRET, async (err, decodedToken)=>{
if(err){
console.log(err.message);
res.locals.user = null;
next();
}
else{
res.locals.user = WHAT SHOULD I ASSIGN HERE;
next();
}
})
}
else{
res.locals.user = null;
next();
}
}
module.exports = { checkUser};
我应该将用户名分配给res.locals.user,对吗?如何获取它?如果在创建
jwt令牌时用户详细信息可用,则应在res.local.user
中分配decodedToken
const checkUser = (req, res, next)=>{
const token = req.cookies.jwt;
if(token){
jwt.verify(token, process.env.JWT_SECRET, async (err, decodedToken)=>{
if(err){
console.log(err.message);
res.locals.user = null;
next();
}
else{
res.locals.user = decodedToken;
next();
}
})
}
else{
res.locals.user = null;
next();
}
}
module.exports = { checkUser};
但在创建令牌时,您的过程应如下所示:
let userDetails = {
id: 1,
username: "sariful",
email: "helloworld@website.com"
...
};
jwt.sign(userDetails, process.env.JWT_SECRET, function () {
...
});
在jwt中,当创建令牌时,它会加密传入jwt.sign
的所有数据。当您在jwt.verify
中解码令牌时,您将获得令牌中显示的解码细节
附言:
您不应该使用router.get('*',checkUser)
作为中间件,你应该使用app.use(checkUser)
它应该是res.locals.user=decodedToken
是的,现在我明白了。