Node.js 应用:Koa2 使用 JWT 进行鉴权

作者:CQITer小编 时间:2018-08-23 21:32

字号
技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

在前后端分离的开发中,通过 Restful API 进行数据交互时,如果没有对 API 进行保护,那么别人就可以很容易地获取并调用这些 API 进行操作。那么服务器端要如何进行鉴权呢?

Json Web Token 简称为 JWT,它定义了一种用于简洁、自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。

说得好像跟真的一样,那么到底要怎么进行认证呢?

Node.js 应用:Koa2 使用 JWT 进行鉴权

首先用户登录时,输入用户名和密码后请求服务器登录接口,服务器验证用户名密码正确后,生成token并返回给前端,前端存储token,并在后面的请求中把token带在请求头中传给服务器,服务器验证token有效,返回正确数据。

既然服务器端使用 Koa2 框架进行开发,除了要使用到 jsonwebtoken 库之外,还要使用一个 koa-jwt 中间件,该中间件针对 Koa 对 jsonwebtoken 进行了封装,使用起来更加方便。下面就来看看是如何使用的。

生成token

这里注册了个 /login 的路由,用于用户登录时获取token。

const router = require('koa-router')(); 

const jwt = require('jsonwebtoken'); 

const userModel = require('../models/userModel.js'); 

router.post('/login', async (ctx) => { 

    const data = ctx.request.body; 

    if(!data.name || !data.password){ 

        return ctx.body = { 

            code: '000002'

            data: null

            msg: '参数不合法' 

        } 

    } 

    const result = await userModel.findOne({ 

        name: data.name

        password: data.password 

    }) 

    if(result !== null){ 

        const token = jwt.sign({ 

            name: result.name

            _id: result._id 

        }, 'my_token', { expiresIn: '2h' }); 

        return ctx.body = { 

            code: '000001'

            data: token, 

            msg: '登录成功' 

        } 

    }else

        return ctx.body = { 

            code: '000002'

            data: null

            msg: '用户名或密码错误' 

        } 

    } 

}); 

module.exports = router; 

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
关键词 >>鉴权 Node.js 应用
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接