Egg框架搭建后台服务【3】- 验证码

2024-01-14 00:36

本文主要是介绍Egg框架搭建后台服务【3】- 验证码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求

登录页面需要一个验证码,防止出现频繁“撞库”情况。

开发

安装

安装 svg-captcha 插件,实现 SVG 图片动态验证码。

npm i --save svg-captcha

配置

svg-captcha 不需要配置,但是因为牵扯到验证码校验时,需要将验证码共享到全局,方便其他位置的方法调用。

所以这里启用 session。(Ps:egg 框架自带 session,不需要额外安装)

// config.default.js
config.session = {key: 'EGG_SESSION_KEY',maxAge: 24 * 3600 * 1000, // 过期时间24小时httpOnly: true, // 默认就是 trueencrypt: true, // 加密传输renew: true  //每次访问页面都会给session会话延长时间
}

后台

const {Service} = require('egg');
const svgCaptcha = require('svg-captcha');class SystemService extends Service {async login(params) {const {ctx, app} = this;// 校验验证码if (params.verifyCode === ctx.session.verifyCode) {ctx.state = 200;ctx.body = {code: 200,success: true,data: {token: 123},msg: '登录成功',show: true}} else {ctx.body = {code: 400,success: false,msg: '验证码错误',show: true}}}async verifyCode() {const {ctx, app} = this;const verifyConfig = {size: 5,ignoreChars: '0oO1ilI', // 验证码字符中排除 0oO1ilInoise: 3, // 干扰线条的数量width: 176,height: 40,fontSize: 50,color: true, // 验证码的字符是否有颜色,默认没有,如果设定了背景,则默认有background: '#fff',}// 生成二维码svgconst captcha = svgCaptcha.create(verifyConfig);// 验证码文字存放在 session 中(不区分大小写)ctx.session.verifyCode = captcha.text.toLowerCase();ctx.response.type = 'image/svg+xml';ctx.body = {code: 200,success: true,data: captcha.data,msg: '验证码获取成功',show: false}}
}module.exports = SystemService;

前台

/** 刷新验证码 */
const reloadCaptcha = () => {captcha().then(res => {verifyImg.value = res.data;});
}<div class="verify-code" @click="reloadCaptcha"><a-tooltip placement="right"><template #title>点击刷新验证码</template><div v-html="verifyImg"></div></a-tooltip>
</div>

总结

验证码的实现借助插件还是比较简单的,但是对于 session 的认知和应用和后端人员还有较大差距,尤其对于 session & cookie 等方面需要加强。

如果自己做的系统对其他人开放的,在保证自己系统足够安全的情况下,我建议大家尽量不要增加验证码,减轻视障朋友们登录系统的负担。拙见~

这篇关于Egg框架搭建后台服务【3】- 验证码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/603341

相关文章

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应