首先安装模块 npm i jsonwebtoken -S
const jwt = require('jsonwebtoken');//token
const { secretOrPrivateKey } = require('../config/conf');//签名 自己定义
//登录接口
router.post('/login',(req,res)=>{
let { uname,upwd } = req.bosy; //获取前端传过来的用户名和密码
User.find({uname:uname}, function(error, result){ //先查询用户名
if(error){
res.json({code:0,msg:error.message})
}else{
if(result.length == 0){ //未查到
res.json({code:0,msg:'该用户不存在'})
}else{
if(upwd == result[0].upwd){ //判断密码
let content = {uname:uname};//生成token主体信息
let token = jwt.sign(content, secretOrPrivateKey, {
expiresIn: 3600 // 1小时过期 以秒为单位
});
res.json({code:1,msg:'登录成功',token:token})
}else{
res.json({code:0,msg:'密码错误'})
}
}
}
})
})
//其他接口验证
//前端将token存储在loacalStorage中
//请求接口时放在请求头Authorization中携带
//后端通过读取Authorization获取前端传过来的token进行验证,验证通过再进行数据库操作
router.get('/find',(req,res)=>{
let token = req.get("Authorization"); // 从Authorization中获取token
jwt.verify(token, secretOrPrivateKey, (err, decode)=> {
if (err) { //时间失效的时候 || 伪造的token
res.send({code:0,msg:'token已失效'});
} else {
User.find({}, function(error, result){
error? res.json({code:0,msg:'查询失败'}) : res.json({code:1,data:result})
})
}
})
})