koa实现登录jsonwebtoken验证demo
1:使用中间件jsonwebtoken
2:将username或者usserid保存
3:生成token 并设置过期时间
4:最后再次访问服务器验证token
const koa = require('koa');
const bodypaser = require('koa-bodyparser');
const jswt = require('jsonwebtoken'); // 生成token
const Router = require('koa-router');
const static = require('koa-static');
// const koajwt = require('koa-jwt');
const app = new koa()
const router = new Router();
var products = [{
productNamt: 'yyc',
price: 200,
dec: '我们的产品的相当好'
}, {
productNamt: 'yyc',
price: 200,
dec: '我们的产品的相当好'
}, {
productNamt: 'yyc',
price: 200,
dec: '我们的产品的相当好'
}]
router.post('/login', async (ctx, next) => {
let { username, password } = ctx.request.body
if (!username || !password) {
return ctx.body = {
code: '02',
data: null,
msg: "参数不合法"
}
}
// 生成token
var token = jswt.sign({
name: username,// token 的主题 一般用来存用户 用户id
}, 'my_token', {// my_token 是秘钥
expiresIn: 1000*60*60*10 // 设置token的过期时间
})
console.log('token=====服务器生成的', token);
ctx.body = {
code: '01',
data: token,
msg: "登录成功"
}
})
// 获取商品列表;验证touken
router.get('/product', async (ctx) => {
// 1: 接收客户端发过来的token
let { token } = ctx.query
console.log(token,'=================客户端发送的');
// 2:验证token
// verify() 验证token 参一:token 参二:秘钥;参三: 回调函数;有验证结果
jswt.verify(token, 'my_token', function (err, res) {
if (err) {
// 5:验证失败,告诉浏览器没有权限
return ctx.body = {
code: '02',
msg: '该用户没有权限'
}
}
console.log(res,'========== 解密后token');// 解密的结果
// 3 验证验证通过后;返回商品列表
ctx.body = {
code: '01',
data: products,
msg: "success"
}
})
})
app.use(bodypaser())
app.use(static('www', {
index: 'login.html'
}))
app.use(router.routes());
app.listen(3000)