Node.js Koa2实现JWT Token用户认证

JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案

前置知识:

1.基于Token的身份验证
2.koa中文文档


案例为了更简洁易懂,使用postman来代替前端界面请求接口。
下面案例通过登录接口/users/login来获取token

代码:

const Koa = require('koa')
const Router = require('koa-router')
const jwt = require('jsonwebtoken')
const jwtKoa = require('koa-jwt')
const util = require('util')
const verify = util.promisify(jwt.verify) 
const secret = 'test'
const app = new Koa()
const router = new Router()
app.use(bodyParser())
const bodyParser = require('koa-bodyparser')
app
    .use(jwtKoa({secret}).unless({
        path: [/^\/user\/login/]
    }))
router
    .post('/users/login', async (ctx, next) => {
        const user = ctx.request.body
        if(user && user.name) {
            let userToken = {
                name: user.name
            }
            const token = jwt.sign(userToken, secret, {expiresIn: '1h'})  //token签名 有效期
            ctx.body = {
                message: '获取token成功',
                code: 1,
                token
            }
        } else {
            ctx.body = {
                message: '参数错误',
                code: -1
            }
        }
    })
    .get('/users/userinfo', async (ctx) => {
        const token = ctx.header.authorization  
        let payload
        if (token) {
            payload = await verify(token.split(' ')[1], secret) 
            ctx.body = {
                payload
            }
        } else {
            ctx.body = {
                message: 'token error',
                code: -1
            }
        }
    })
app
    .use(router.routes())
    .use(router.allowedMethods())
app.listen(3000, () => {
    console.log('app listening 3000...')
})

一开始直接开始获取用户信息(也就是直接请求/users/userinfo接口):

显示无权限:显示无权限
输入name值进行登录,点击postman的send按钮进行登录请求(也就是请求/users/login接口):
在这里插入图片描述
得到返回的token值(模拟用户登录成功,拿到了token)
在这里插入图片描述
拿到token以后再去请求用户信息接口(将token值放在get请求的header上作为标识,请求用户信息接口):
在这里插入图片描述
接口返回给我们该用户的name值(说明此时拿着token就可以成功请求/users/userinfo接口了)
在这里插入图片描述
然后就可以根据name值来查询用户信息以及用户权限,实现权限管理,也消除了http无状态的缺点,可以用来实现单点登录。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值