美文网首页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