Nest.js 实战 (七):如何生成 SVG 图形验证码

简介: 这篇文章介绍了使用NestJS实现Session验证的图形验证码功能的具体步骤。首先,通过powershell代码安装依赖pnpmaddsvg-captcha。然后,在控制器中使用TypeScript代码引入相关依赖,创建一个图形验证码的接口,当请求该接口时,返回一张随机图片验证码。最后,进行了效果演示。

具体步骤

  1. 安装依赖
    pnpm add svg-captcha
    
  2. 在控制器中使用

    import {
         
          Controller, Get, Res, Session } from '@nestjs/common';
    import {
         
          ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; // swagger 接口文档
    import {
         
          Response } from 'express';
    import svgCaptcha from 'svg-captcha';
    
    import {
         
          VerifyCodeResponseDto } from './dto/response-auth.dto';
    
    @ApiTags('身份鉴权')
    @Controller('auth')
    export class AuthController {
         
         
    /**
    * @description: 获取图形验证码
    */
    @Get('captcha') //当请求该接口时,返回一张随机图片验证码
    @ApiOkResponse({
         
          type: VerifyCodeResponseDto })
    @ApiOperation({
         
          summary: '获取图形验证码' })
    async getCaptcha(@Session() session: Api.Common.SessionInfo, @Res() res: Response) {
         
         
     const captcha = svgCaptcha.createMathExpr({
         
         
       //可配置返回的图片信息
       size: 4, // 验证码长度
       ignoreChars: '0oO1ilI', // 验证码字符中排除 0oO1ilI
       noise: 2, // 干扰线条的数量
       width: 132,
       height: 40,
       fontSize: 50,
       color: true, // 验证码的字符是否有颜色,默认没有,如果设定了背景,则默认有
       background: '#fff',
     });
     session.captchaCode = captcha.text; //使用session保存验证,用于登陆时验证
     res.type('image/svg+xml'); //指定返回的类型
     return res.send(captcha.data); //给页面返回一张图片
    }
    }
    

更多详细文档:svg-captcha

Session 验证

在客户端登录的时候,我们就能根据传过来的验证码与 Session 中的信息判断是否正确:

/**
  * @description: 用户登录
  */
 async login(params: LoginParamsDto, session: Api.Common.SessionInfo) {
   
   
    // 获取验证码
   const {
   
    captchaCode } = params;
   // 判断验证码
   if (captchaCode.toUpperCase() !== session.captchaCode.toUpperCase()) {
   
   
     return responseMessage(null, '验证码错误', -1);
   }

   // 验证成功,返回 token
   return responseMessage(tokens);
 }

效果演示

j0sfx0d007n86fbjijr8hc0v7f16djkc.png

相关文章
|
29天前
|
自然语言处理 JavaScript 前端开发
深入理解JavaScript中的闭包:原理与实战
【10月更文挑战第12天】深入理解JavaScript中的闭包:原理与实战
|
2月前
|
JavaScript
Nest.js 实战 (十一):配置热重载 HMR 给服务提提速
这篇文章介绍了Nest.js服务在应用程序引导过程中,TypeScript编译对效率的影响,以及如何通过使用webpackHMR来降低应用实例化的时间。文章包含具体教程,指导读者如何在项目中安装依赖包,并在根目录下新增webpack配置文件webpack-hmr.config.js来调整HMR相关的配置。最后,文章总结了如何通过自定义webpack配置来更好地控制HMR行为。
|
12天前
JS+SVG实现的滑块表情评价打分特效源码
JS+SVG实现的滑块表情评价打分特效源码是一段基于JS+SVG制作的表情评价打分效果代码,可以利用鼠标拖动滑块实现表情变化打分效果,支持手机端4个表情分段评价,会随着鼠标滑动的方向而变化
22 2
|
19天前
|
JavaScript 前端开发 开发者
探索JavaScript原型链:深入理解与实战应用
【10月更文挑战第21天】探索JavaScript原型链:深入理解与实战应用
26 1
|
1月前
|
SQL 前端开发 JavaScript
Nest.js 实战 (十五):前后端分离项目部署的最佳实践
这篇文章介绍了如何使用现代前端框架Vue3和后端Node.js框架Nest.js实现的前后端分离架构的应用,并将其部署到生产环境。文章涵盖了准备阶段,包括云服务器的设置、1Panel面板的安装、数据库的安装、域名的实名认证和备案、SSL证书的申请。在部署Node服务环节,包括了Node.js环境的创建、数据库的配置、用户名和密码的设置、网站信息的填写、静态网站的部署、反向代理的配置以及可能遇到的常见问题。最后,作者总结了部署经验,并希望对读者有所帮助。
120 11
|
1月前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
12天前
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
26 0
|
1月前
|
数据采集 JSON 前端开发
JavaScript逆向爬虫实战分析
JavaScript逆向爬虫实战分析
|
1月前
|
前端开发 JavaScript API
JavaScript逆向爬取实战——使用Python实现列表页内容爬取(二)
JavaScript逆向爬取实战——使用Python实现列表页内容爬取(二)
|
1月前
|
前端开发 JavaScript API
JavaScript逆向爬取实战——使用Python实现列表页内容爬取(一)
JavaScript逆向爬取实战——使用Python实现列表页内容爬取(一)