为了账号安全,请及时绑定邮箱和手机立即绑定

【备战春招】第15天 JWT 练习:生成 token

标签:
Node.js

课程章节:第3章 技术选型和知识点介绍(下) 3-15 jwt-加密用户信息

课程讲师双越

课程内容

上节课学习了 JWT 的理论知识,这节课上手应用 JWT。

项目初始化

koa2 -e koa-jwt-study

cd koa-jwt-study

yarn install

安装 JWT 相关依赖模块:

yarn add koa-jwt jsonwebtoken 

koa-jwt :基于 jsonwebtoken 的 koa 中间件,用于校验 token,控制哪些路由需要 jwt 验证,哪些路由不需要验证。

jsonwebtoken - 它是JWT 技术 在 Node 环境下的一种实现,用于生成token,在 koa2 以后的版本不再提供 jsonwebtoken 的方法,所以需要另行安装。

koa-jwt 依赖 jsonwebtoken 这个模块,所以在代码中中直接使用 koa-jwt 去校验客户端发来的 token 即可。

使用

生成 JWT 需要使用秘钥,所以创建一个配置文件,用于存放 secret:

// conf/index.js

module.exports = {
 JWT_SECRET: 'H7&_DVI87@D'
}

导入相关中间件并注册:

// app.js

const jwt = require('jsonwebtoken')
const { SECRET } = require('./config')

app.use(jwtKoa({
    secret: SECRET
}).unless({
    // 排除不需要校验 token 的路径
    path: [/\/user\/login/]
})

对于每个请求,都会经过此中间件,它会使用 secret 来校验请求中的 token 是否合法,通过校验的请求才能往下走,交给其他的中间件去处理。

未通过 koa-jwt 校验的请求,会返回客户端 401,表示没有权限访问。

使用 sign 签名方法,在用户登录接口中生成 token:

// routes/user.js
const jwtKoa = require('koa-jwt')
const { SECRET } = require('./config')

router.post('/login', async (ctx, next) =>{
    const { username, password } = ctx.request.body
    // 假设通过了数据库查询,验证用户身份正确
    // 使用 koa-jwt 生成 token
    const token = jwt.sign({
        username,
    }, SECRET, {
        expiresIn: '1h'
    })
    ctx.body = {
       code: 0,
       data: {
           token
       }
    }
})

到此,当用户访问 /users/login 接口,就能生成 token了,服务端会将生成的token 返回给客户端,客户端接收响应后,将 token 存储起来,之后的请求必须携带上此 token,才能通过 koa-jwt 中间件的校验

图片描述

课程收获

这节课学习了使用 koa-jwt 来校验token和白名单,使用 jsonwebtoken 生成 token。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
2
获赞与收藏
4

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消