token可以理解成唯一的身份标识
1:安装生成token的包
npm install jsonwebtoken --save
2:引入
var jwt = require("jsonwebtoken")
3:生成token
key:自定义
var token =jwt.sign(对象,"key",{ expiresIn: 60*60*1 // 1小时过期 })
完整的代码 在登录的接口 生成一个token,并把这个token返回给login的页面
router.post("/login",(req,res,next)=>{
let {username,userpwd}=req.body;
//去验证用户名和密码是否匹配
let md5 = crypto.createHash("md5");
userpwd = md5.update(userpwd).digest("hex");
let token = jwt.sign({//就一个令牌(指纹)
userid:1,
username,
type:1
},"abc",{
expiresIn:60*30
})
res.json({
code:1,
msg:"ok",
token
})
});
let token = jwt.sign({//就一个令牌(指纹)
userid: 1,
username,
type: 1
}, "abc", {
expiresIn: 6 * 3
})
把token返回给login的页面
res.json({
code:1,
msg:"ok",
token
})
4:使用token
登录成功以后 把token在页面做保存 保存在localStorage里面
5:客户端每次向服务端请求资源的时候需要带着服务端签发的 Token .
接口使用 需要带头部设置 并把存在localStorage里面的token取出来传给相应的接口 接口的路径为“checktoken”
headers:{
token:token
}
$("#btn").click(()=>{
$.ajax({
type:"get",
url:"checktoken",
headers:{
token:window.localStorage.getItem("token")
}
}).then(res=>{
console.log(res);
})
})
6:token由前端传过来 接口需要接受 ,要用 let token = req.headers.token;
服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
后台接受验证接口安全是否合法 jwt.verity
router.get("/checktoken",(req,res,next)=>{
let token = req.headers.token;
jwt.verify(token,"abc",(err,info)=>{
if(err){
res.json({
code:0,
msg:"token解析失败 权限异常"
})
}else{
res.json({
code:1,
msg:"解析成功",
info
})
}
})
})