express根据token获取用户id

本文介绍如何使用JWT进行用户登录认证,并在认证成功后如何将用户ID附加到JWT中。同时,详细解释了如何创建一个中间件来检查用户是否已登录,以及如何从请求中解析并获取用户ID。
//登陆时注册token
db.query(`select * from user where name=${username} and password='${password}'`, (result) => {
    if (result.length == 1) {
    	//jwt.sign({userId:result[0].id} 在注册的时候加入用户id
        const token = jwt.sign({userId:result[0].id}, 'buddha', {
            expiresIn: 60 * 60 * 24// 授权时效24小时
        });
        jwt.verify(token, 'suiyi', function(err, decoded) {
            let accessToken=decoded;
            accessToken.token=token;
            accessToken.id=result[0].id;
            accessToken.name=result[0].name;
            res.send({
                "status": "success",
                "data": [accessToken]
            });
        });
    } else {
        return next(createError(400, '账号或密码错误'));
    }
})

创建一个检查是否登录的中间件,此时就会看到用户id


var createError = require('http-errors');
var jwt = require('jsonwebtoken')
module.exports =(req, res, next)=>{
    // 拿取token 数据 按照自己传递方式写
    var token = req.body.token || req.query.token || req.headers['token'];

    if (token) {
        // 解码 token (验证 secret 和检查有效期(exp))
        jwt.verify(token, 'suiyi', function(err, decoded) {
            if (err) {
                return res.status(400).send(next(createError(400, '无效的token')));
            } else {
                // 如果验证通过,在req中写入解密结果
                console.log(decoded)//{ userId: 31, iat: 1574244315, exp: 1574330715 }
                req.decoded = decoded;
                next();
            }
        });
    } else {
        return res.status(403).send(next(createError(403, '没有找到token')));
    }
};

最后 req.decoded.userId即可获取用户id

exports.collect_article = async (req, res, next) => {
    
    console.log(req.decoded.userId)

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值