美文网首页KOA
9.3KOA JsonWebToken

9.3KOA JsonWebToken

作者: 帶頭二哥 | 来源:发表于2020-01-06 02:18 被阅读0次

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)

相关文章

网友评论

    本文标题:9.3KOA JsonWebToken

    本文链接:https://www.haomeiwen.com/subject/mfdhactx.html