KOA

9.3KOA JsonWebToken

2020-01-06  本文已影响0人  帶頭二哥

JsonWebToken

介绍

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

优点

所需要的中间件

jsonwebtokennode 实现方案

    npm install jsonwebtoken --save

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)
上一篇下一篇

猜你喜欢

热点阅读