生成token使用的是jsonwebtoken这个中间件,验证token使用的是koa-jwt这个中间件
npm install jsonwebtoken --save npm install koa-jtw --save
var jwt = require('jsonwebtoken');
let token=jwt.sign(body,secret,{expiresIn:3600}) if(token){ ctx.body={ ststus:200, token, } }
koa-jwt主要提供路有权限控制的功能,它会对需要限制的资源请求进行检查,也就是对某些路由接口进行验证
在app.js中写入:
const koaJwt = require('koa-jwt') //秘钥 //对token失效处理 app.use(function(ctx, next){ return next().catch((err) => { if (401 == err.status) { ctx.status = 401; ctx.body = 'token效验 错误'; } else { throw err; } }); }); let secret=require('./config/token'); //不需要验证的路由 app.use(koaJwt({secret:secret}).unless({ path:['/user/login','/user/current'] }))
完整代码app.js:
let Koa = require('koa');//引入koa let app = new Koa(); //引入bodyparser解析post传递的参数 let bodyparser = require('koa-bodyparser') //引入koa-router中间件 var Router = require('koa-router'); const koaJwt = require('koa-jwt') app.use(function(ctx, next){ return next().catch((err) => { if (401 == err.status) { ctx.status = 401; ctx.body = 'token效验 错误'; } else { throw err; } }); }); //秘钥 let secret=require('./config/token'); app.use(koaJwt({secret:secret}).unless({ path:['/user/login','/user/current'] })) var router = new Router(); //引入路由 let index = require('./router/index'); let user = require('./router/user'); //使用路由 router.use('/', index.routes()) router.use('/user', user.routes()); // 使用bodyparser中间件 app.use(bodyparser()); app .use(router.routes()) .use(router.allowedMethods()); app.listen(3000);
user.js代码:
let Router = require('koa-router'); let router = new Router(); var jwt = require('jsonwebtoken'); let secret=require('../config/token'); router.get('/', (ctx, next) => { let query = ctx.query; ctx.body = query }) router.post('/add', async (ctx, next) => { console.log(ctx.request.body) ctx.body = ctx.request.body; }) //生成token router.post('/login', async (ctx, next) => { let body = ctx.request.body; let name = body.name; let pwd = body.password; console.log(body) let token=jwt.sign(body,secret,{expiresIn:3600}) if(token){ ctx.body={ ststus:200, token, } } }) router.get('/current',async(ctx,next)=>{ let token=ctx.header.authorization; jwt.verify(token,secret,(err,decoded)=>{ if(err) throw err; ctx.body={ status:200, tesult:decoded } }) }) //抛出路由配置 module.exports = router
最后补充一下,koa-jwt解析的结果可以在路由中的ctx.state.user中获取
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接