在app.js数据中先引用对象

const jwttestRouter = require("./routers/jwttest.router");
const { fail } = require("./routers/toast");
const jwt = require("jsonwebtoken");
const key = "web";

在添加验证

所有数据需要添加信息的数据模块都可以得到验证

app.use(async (ctx, next) => {
  const exp = [
    '/login',
    '/',
    'register'
  ]; 
  if(exp.includes(ctx.url)){
    await next();
    return;
  }
  console.log(ctx.headers);
      const authorization = ctx.headers.authorization;
      if(!authorization){
          return fail(ctx, "请添加 token 信息");
      }
      const token = authorization.split(' ')[1];
      try {
          const user = jwt.verify(token, key);
          if(user.name==="admin"){
              await next();
          }else{
              return fail(ctx, "权限不足");
          }
      } catch (error) {
          return fail(ctx, error);
      }
})

这一步是不需要再次添加验证的地址

const exp = [
    '/login',
    '/',
    'register'
  ];

创建一个token加密方式

第一步加密

var jwt = require('jsonwebtoken');
var token = jwt.sign({ 加密字符串 }, '秘钥');   加密的格式一般为256
var token = jwt.sign({ id: 1001 }, 'shhhhh', { algorithm: 'RS256', expiresIn:60});// expiresIn:60  加密时间

第二步验证   verify验证,可返回数据(id)

var decoded = jwt.verify(token, 'shhhhh');

创建一个jwttest.router.js文件

引入对象

const { success, fail } = require("../routers/toast");
const jwt = require("jsonwebtoken");

在app.js文件创建路由传递参数

jwttestRouter(router);

在jwttest.router.js文件引入    key密钥   加密解密都需要密钥

const key = "web"; 

创建一个函数,进行加密

module.exports = function (router) {
    router.post("/login", async ctx => {
        const {name, pwd} = ctx.request.body;
        if(name==="admin" && pwd==="123456"){
            const token = jwt.sign({name:"admin"},key,{expiresIn:6000})
            return success(ctx, "Bearer " + token)
        }else{
            return fail(ctx, "账号或密码不正确!")
        }
    }).get("/data", async ctx => {
            return success(ctx, {});
    })
}

给name用户名加密,用户密码不加密(意外发生或数据意外删除丢失密码加密也无效果)

if(name==="admin" && pwd==="123456"){
            // 给name加密  密码不加密
            const token = jwt.sign({name:"admin"},key,{expiresIn:6000})
            return success(ctx, "Bearer " + token)
        }else{
            return fail(ctx, "账号或密码不正确!")
        }

给密码加密后终端的运行码用于验证加密是否成功   在后台数据查询,添加,修改,删除中使用(test.http)

@auth=Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiYWRtaW4iLCJpYXQiOjE2Mzg1MjE2OTksImV4cCI6MTYzODUyNzY5OX0.Zb4UghyVoZFOPZRFwROprf-1pmcdkTpLLG6hnD9mrvA

 

posted on 2021-12-05 21:42  银小兔  阅读(124)  评论(0)    收藏  举报