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

相关文章

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主