2020-03-06node.js 学习日记-tounk 插件jsonwebtoken;

         首先 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里面配置自定义插件;

项目目录;

配置自定义插件


你可能感兴趣的:(2020-03-06node.js 学习日记-tounk 插件jsonwebtoken;)