Node.js nodejs在登录时向所有页面显示用户名

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

我只是在node.js中体验了一下,感觉有点困惑。我想在登录时向所有页面显示用户名。我可以使用jsonwebtoken获取用户id。我正在使用MySQL。这是我的路线

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
是的,现在我明白了。