9.3KOA JsonWebToken

JsonWebToken

介绍

JsonWebToken(简称:JWT)是一种完全的客户端客户端解决session存储方案,把所要存储的数据并且添加过期时间等等信息在服务器端打包加密最终生成 token 下发给客户端,客户端保存 token 用于下次请求,而 token 作为用户的有效凭证

优点

  • 服务器端不需要存储和维护 session
  • 由于加解密都是由服务器端进行,所以相比于 cookie 较安全(但也不是绝对的安全)

所需要的中间件

  • jsonwebtoken

jsonwebtokennode 实现方案

    npm install jsonwebtoken --save
  • koa-jwt

jsonwebtokenkoa 实现方案

    npm install koa-jwt --save

使用案例

    // 引入 koa 模块
    const Koa = require('koa')
    // 创建 koa 应用
    const app = new Koa()

    // 定义全局异常捕获
    app.use(async (ctx, next) => {
        return next().catch((err) => {
            if (401 == err.status) {
                ctx.status = 401;
                ctx.body = '验证失败\n';
            } else {
                throw err;
            }
        });
    });

    // 引入 jwt 模块
    var koaJWT = require('koa-jwt');

    // 设置秘钥,并且设置不需要验证的路径
    app.use(koaJWT({ secret: 'shared-secret' }).unless({ path: [/^\/public/,/^\/login/] }));

    // 设置登录接口
    // 引入 jsonwebtoken
    var jwt = require('jsonwebtoken')
    // 登录
    app.use(async (ctx,next) => {
        if(ctx.url.match(/^\/login/)) {
            // 登录成功生成 token
            ctx.body = jwt.sign({uid:'123456'},'shared-secret',{ expiresIn: '1h'})
        } else {
            await next()
        }
    })

    // 验证成功后访问
    app.use(async (ctx,next) => {
        if(ctx.url.match(/^\/public/)) {
            ctx.body = '可以访问 public';
        } else if(ctx.url.match(/^\/api/)) {
            // ctx.state 保存了 通过 jwt 解密后的数据
            console.log(ctx.state)
            ctx.body = "可以访问 api"
        }
    })

    // 启动应用
    app.listen(3000)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文/志成哥哥 不得不说,如果自己每天都觉得过得不开心,想想就让人害怕不是吗?如果渐渐地变成了活的不开心,是不是活下...
    志成哥哥阅读 4,057评论 0 1
  • 感于自己无头苍蝇地忙,很少亲自下厨。终,于3月7日晚的空闲,为他们做了一顿剁椒鱼头 取新鲜的大头鱼,洗弄...
    柒Seven阅读 3,043评论 0 2
  • 优美的花朵 殷红的花瓣 你的美让全世界都为之一振 为你捧心又折腰 夜影婆娑中,秋雨菲菲 你依旧傲然绽放 薄雾浓浓中...
    财神爷的小弟阅读 3,173评论 18 21