在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