1.生成token
a.安装jsonwebtoken
cnpm install jsonwebtoken --save
b.生成token
var jwt=require('jsonwebtoken');
router.get('/',async (req,res,next)=>{
var token=jwt.sign({name:'张三'},'this is sign',{
expiresIn:60
});
res.send(token);
});
2.在中间件中封装权限的判断
cnpm install basic-auth --save //安装basic-auth
var authMiddle=function(req, res, next){
var result = auth(req);
console.log(result);
/*
1、可以获取客户端传过来的pass(sign)
2、token
3、获取url传过来的参数 uid=1&address_id=345
4、我们根据uid查找用户的密码 私钥=md5(密码)
5、用户同样的算法生成 服务器的Sign var 服务器的Sign=md5('uid=1&address_id=345+私钥');
6、对比客户端的签名和服务器端是否一样 如果一样允许 不一样拒绝
*/
if (!result) {
res.send({
success: false,
msg: "token错误"
});
return;
}
try {
var decoded = jwt.verify(result.name, 'this is sign');
/**
* 如果token不一致
* 报错信息:
* {
"success": false,
"msg": {
"name": "JsonWebTokenError",
"message": "invalid token"
}
}
*/
console.log(decoded);
next();
} catch (error) {
res.send({
success: false,
msg: error
})
}
}
3.获取请求头里面的token
router.get('/address',authMiddle,(req,res,next)=>{
//这里如果验证成功,那么会发送这些信息即客户端想要的
res.send({
success: true,
result:[
{"name":"张三","address":"北京市"},
{"name":"李四","address":"北京市"},
{"name":"王五","address":"北京市"}
]
});