Koa2框架token验证

Posted on 2020-04-03 22:09  张雪冬前端学习园地  阅读(2347)  评论(0编辑  收藏  举报

Koa框架token的验证

 

1.代码

 

// 安装创建和解析token的第三方工具

npm install jsonwebtoken

// 引入使用

const jwt = require('jsonwebtoken')

// 创建一个token

const token = jwt.sign({
    //token的创建日期
    time: Date.now(),
    //token的过期时间
    timeout: Date.now() + 60000,
    username: '小美',
    id: 1

// token:解析token的标识

}, 'token')


// 解析token

const a = jwt.verify(token, 'token')

 

 

2.验证token

// 单独的创建一个中间件,然后在app.js中注册使用
const jwt = require('jsonwebtoken')
async function check(ctx, next) {

    let url = ctx.url.split('?')[0]
    
    // 如果是登陆页面和注册页面就不需要验证token了
    if (url === '/admin/user/login' || url === '/admin/user/register') {
        await next()
    } else {

        // 否则获取到token
        let token = ctx.request.headers["authorization"]

        if (token) {

            // 如果有token的话就开始解析
            const tokenItem = jwt.verify(token, 'token')
            // 将token的创建的时间和过期时间结构出来
            const { time, timeout } = tokenItem
            // 拿到当前的时间
            let data = new Date().getTime();
            // 判断一下如果当前时间减去token创建时间小于或者等于token过期时间,说明还没有过期,否则过期
            if (data - time <= timeout) {
                // token没有过期
                await next()
            } else {
                ctx.body = {
                    status: 405,
                    message:'token 已过期,请重新登陆'
                }  
            }
        }
    }
}



module.exports = check


// app.js中注册使用

const checkToken = require('./middleware/checkToken.js')

// 验证token的中间件函数

app.use(checkToken)