eggjs 怎么使用 egg-jwt 进行用户鉴权实现登录功能?

网友投稿 521 2022-11-01


eggjs 怎么使用 egg-jwt 进行用户鉴权实现登录功能?

鉴权过程

在实现登录接口时,我们先了解一下大致的鉴权过程:

用户输入账号密码调用登录接口发起请求服务端通过 egg-jwt 插件,结合自定义的加密字符串,生成一个 token 令牌然后,接口响应返回 token网页端获取到 token 之后,需要将其存在浏览器本地之后每次发起请求,无论是获取数据,还是提交数据,都需要将 token 带上,用来标识比如发起接口请求账单数据服务端通过 egg-jwt 插件解密 token解密之后就可以拿到用户信息,从而去查找用户的账单数据然后,接口响应返回对应的账单数据

准备 egg-jwt 插件

安装 egg-jwt 插件

npm i egg-jwt -S

使用方法可以参考:​​egg-jwt 插件

1、在 ​​config/plugin.js​​ 下添加插件:

jwt: { enable: true, package: 'egg-jwt'}

2、在 ​​config/config.default.js​​ 下添加自定义加密字符串

// jwt 配置 config.jwt = { secret: 'kaimo313', // 自定义加密字符串,secret 是在服务端的,不要泄露 };

实现登录接口

1、简单逻辑校验

在 ​​/controller/user.js​​ 下新建 login 方法,需要判断有没有该用户;找到用户,判断密码是否输入正确

// 登录async login() { try { const { ctx, app } = this; // 获取登录时的 username, password const { username, password } = ctx.request.body; // 根据用户名,在数据库查找相对应的id操作 const userInfo = await ctx.service.user.getUserByName(username); // 1、没找到说明没有该用户 if (!userInfo || !userInfo.id) { ctx.body = { status: 500, desc: '账号不存在', data: null } return } // 2、找到用户,并且判断输入密码与数据库中用户密码 if (userInfo && password != userInfo.password) { ctx.body = { status: 500, desc: '账号密码错误', data: null } return } } catch (error) { ctx.body = { status: 500, desc: '登录失败', data: null } }}

2、egg-jwt 怎么生成 token

github 网站 ​​How To Create A Token

生成 token 之后,在返回给客户端

const token = app.jwt.sign({ id: userInfo.id, username: userInfo.username, exp: Math.floor(Date.now() / 1000) + (24 * 60 * 60) // token 有效期为 24 小时}, app.config.jwt.secret);// 返回 tokenctx.body = { status: 200, desc: '登录成功', data: { token }};

3、添加登录路由

在路由 router.js 脚本中添加:

'use strict';/** * @param {Egg.Application} app - egg application */module.exports = app => { const { router, controller } = app; // 注册路由 router.post('/api/user/register', controller.user.register); // 登录路由 router.post('/api/user/login', controller.user.login);};

4、测试登录接口

用 Postman 去测试一下接口是否可行,这里我才用 Apifox 去测试,后面我在单独出一篇介绍一下怎么用 Apifox 生成接口文档。如果登录接口调用成功,效果如下:

{ "status": 200, "desc": "登录成功", "data": { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NSwidXNlcm5hbWUiOiJrYWltbzMxMyIsImV4cCI6MTY0MjU5NTc2MywiaWF0IjoxNjQyNTA5MzYzfQ.BZuaRvEU7_SuqtMU8OtR5fRsa5QSSm0x26i4ZfWwGO0" }}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎么使用 nvm 控制 nodejs 版本切换?
下一篇:window 系统里怎么使用 jsvu 工具快速调试 v8?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~