首先 token是在服务端产生的,他不受同源策略所影响,也不会受到cfrs的攻击,他类似于一个身份证一样的东西,每一个用户都有一个独一无二的字段,可以通过这个字段,服务端可以通过token验证用户是否合法。
现在和大家说一下怎么在 egg里面使用token,和前端进行联动,
首先下载插件依赖
第一步 下载:
cmd 下载 npm install jsonwebtoken -g 下载到全局,或者 -save 下载到项目依赖。
第二步 引入:
let jwt=require(“jsonwebtoke”);使用common.js规范
第三步 使用:
我们可使用jsonwebtoken来进行签发一个token;平时使用的一般为3个参数,
let token=jwt.sign(info,secret,options);
1,第一个参数是,对token的描述信息,简单的来说可以来保存用户的一些数据,也可以为对象的格式。
2,第二个参数,密钥,你自己设置的一些字段(只有自己知道)。
3,第三个参数,token的过期时间,一般为对象格式,{expiresIn:60*60}这个就代表1个小时号过期。
.可以使用下面的格式;
let token=jwt.sign({num,password,role_id:data[0].role_id},'2020306',{expiresIn:60*60});
后台对于用户的做完验证以后我们可以携带token返回前端,
ctx.body={
code:1,
msg:"登录成功",
token
};
以上是通过签发token,下面讲解一下具体怎么样拦截token,我使用的node.js的egg框架
可以用过自定义用过插件来拦截获取token,首先创建一个名字为auther.js文件,
里面引入let jwt=require(“jsonwebtoke”);使用common.js规范
module.exports=()=>{
return async (ctx,next)=>{
//首先获取前台传递过来得token,
//获取请求头使用get函数,他会返回一个字段,就是我们返回给前端的token
let token=ctx.get("token");
//把登录注册接口,直接排除在外,放行;
//当然你可以自定义一些接口,可以免除验证token,一般为登陆接口和注册接口
let writeArr=["/api/login","/api/registry"];
//ctx.path----获取请求得路由
if(writeArr.includes(ctx.path)){
//如果符合条件;
//直接放行
await next();
}else{
try {
//通过token得到客户得信息;
//反向解析出用户数据;
// jsonwebtoken.verify(token,密钥,回调函数);
//这里要注意,反向解析token的时候的密钥也要和返回前端的密钥保持一致。
let info=jwt.verify(token,'2020306');
console.log('token得到的用户信息----',info);
//得到token的验证信息之后可以做一些相关判断;
await next();
} catch (error) {
console.log(error);
if(error.name==='TokenExpiredError'||error.name==='JsonWebTokenError'){
//说明token传递有问题;
ctx.status=401;
ctx.body={
code:4,
msg:error
}
}else{
ctx.body={
code:0,
msg:error
}
}
}
}
}
}
下面是在egg里面配置自定义插件;
项目目录;
配置自定义插件