//登陆时注册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)
}

本文介绍如何使用JWT进行用户登录认证,并在认证成功后如何将用户ID附加到JWT中。同时,详细解释了如何创建一个中间件来检查用户是否已登录,以及如何从请求中解析并获取用户ID。
2601

被折叠的 条评论
为什么被折叠?



