nest.js实现登录验证码功能(学习笔记)

news2024/12/25 1:55:41

安装express-session

npm i express-session 

引入 注册session

import * as session from 'express-session';

import { NestFactory } from '@nestjs/core';
import {
  DocumentBuilder,
  SwaggerModule,
} from '@nestjs/swagger';

import { AppModule } from './app.module';

async function bootstrap() {
  // NestFactory 用来创建 Nest 应用实例
  const app = await NestFactory.create(AppModule);
  // secret: 生成服务端session 签名 可以理解为加盐
  // name: 生成客户端cookie 的名字 默认 connect.sid
  // cookie: 设置返回到前端 key 的属性,默认值为{ path: ‘/’, httpOnly: true, secure: false, maxAge: null }。
  // rolling:在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)
  // 配置swgui接口文档
  const config = new DocumentBuilder()
    .setTitle('Cats example')
    .setDescription('The cats API description')
    .setVersion('1.0')
    .addTag('cats')
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('api', app, document);
  app.use(session({ secret: "XiaoMan", name: "xm.session", rolling: true, cookie: { maxAge: null } }))
  // restful版本控制
  // app.enableVersioning({
  //   type: VersioningType.URI
  // })
  await app.listen(3000);
}
bootstrap();

安装验证码插件 svgCaptcha

npm install svg-captcha -S

验证码接代码如下

import * as svgCaptcha from 'svg-captcha';
import {
  Body,
  Controller,
  Get,
  Post,
  Req,
  Res,
  Session,
} from '@nestjs/common';
import { WeiService } from './wei.service';
@Controller('wei')
export class WeiController {
  constructor(private readonly weiService: WeiService) {}
  // 获取验证码接口
  @Get('code')
  createCode(@Req() req, @Res() res, @Session() session) {
    const captcha = svgCaptcha.create({
      size: 4,//生成几个验证码
      fontSize: 50, //文字大小
      width: 100,  //宽度
      height: 34,  //高度
      background: '#cc9966',  //背景颜色
    })
    req.session.code = captcha.text //存储验证码记录到session
    res.type('image/svg+xml')
    res.send(captcha.data)
  }
  // 效验验证码
  @Post('create')
  createUser(@Body() body, @Session() session) {
    // console.log("@!@@", body, session.code)
    if (session.code === body?.code) {
      return {
        message: "验证码正确!!!!!"
      }
    } else {
      return {
        message: "验证码错误!!!!!!!!!!!!!!!"
      }
    }
  }
}

结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1429450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(五)springboot 配置多数据源连接mysql和hive

项目结构如下 mysql 执行如下建表语句,并插入一条测试数据 1 2 3 4 5 CREATE TABLE user ( id int(11) NOT NULL, name varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_ge…

计算机服务器中了DevicData勒索病毒如何解密,DevicData勒索病毒解密流程

网络数据安全一直是企业关心的主要话题,近期,云天数据恢复中心接到很多企业的求助,企业的计算机服务器遭到了DevicData勒索病毒攻击,导致企业计算机服务器瘫痪无法正常工作,严重影响了工作业务开展。经过云天数据恢复中…

【C语言】大小写字母的相互转化:多种方法解析及原理说明

在 C 语言编程中,我们经常需要进行大小写字母的相互转化。这种转化可以用于实现字符串的大小写转换、字符的大小写比较等操作。本篇博客将介绍多种方法来实现大小写字母的相互转化,并说明其原理和使用场景。 目录 方法一:标准库函数 方法二…

C# Onnx yolov8 水表读数检测

目录 效果 模型信息 项目 代码 训练数据 下载 C# Onnx yolov8 水表读数检测 效果 模型信息 Model Properties ------------------------- date:2024-01-31T10:18:10.141465 author:Ultralytics task:detect license:AGPL-…

在VMware Workstation上安装深度系统Deepin V23 Beta3

原文链接:在VMware上安装深度Deepin V23 Beta3 大家好!深度系统(Deepin)以其美观的界面和用户友好的设计而受到广泛欢迎。最近,深度系统的最新版本Deepin V23 Beta3已经发布。今天,我将为大家带来如何在VMw…

Vivado_2018.3文件 source无法自动更新,并且tb仿真文件不显示set as top,需要关闭Vivado之后重启

如下图所示,如果没有set as top这个选项,在确认代码没有问题的情况下,则需要重启vivado. 正常情况下如果有多个_tb仿真文件,会在simulation sources——sim_1下显示,_tb文件前面会有箭头 点开箭头之后,会发…

Matomo 访问图形显示异常

近期我们的把 PHP 系统完全升级后,访问 Matomo 的站点有关访问的曲线无法显示。 出现的情况如下图: 我们可以看到图片中有关的访问曲线无法显示。 如果具体直接访问链接的话,会有下面的错误信息。 问题和解决 出现上面问题的原因是缺少 ph…

Chemkin模拟HFC-125对碳氢燃料燃烧抑制的影响

1 机理建立 抑制剂的详细机理包含四个子机理: (1)烷烃/空气燃烧子机理:(2) 氟碳抑制子机理;(3)氯氟交互作用子机理;(4)碳抑制子机理。对于碳氢火焰燃烧采用AramcoMech的 C1-C4 机理,包含 111 个组分,784 步基元反应。涉及到氟组分在碳氢火焰中的抑制反应…

【QT】贪吃蛇小游戏 -- 童年回忆

成品展示 项目分析: 🐍基本元素如下 🐍小蛇的设计,初始大小蛇头占一个方块,蛇身占两个方块。 🐍关于小蛇的移动,采用蛇头前进方向增加一个方块,蛇尾减掉一个方块的实现方法。 &#…

算法学习——华为机考题库3(HJ21 - HJ25)

算法学习——华为机考题库3(HJ21 - HJ30) HJ21 简单密码 描述 现在有一种密码变换算法。 九键手机键盘上的数字与字母的对应: 1–1, abc–2, def–3, ghi–4, jkl–5, mno–6, pqrs–7, tuv–8 wxyz–9, 0–0,把密码…

2023年计算机视觉领域突破性研究有哪些?

B站:啥都会一点的研究生公众号:啥都会一点的研究生 ​回顾2023年,计算机视觉领域有哪些较为突出的研究成果?一起看看吧 SAM(Segment Anything Model) SAM 由 Meta AI 开发,是 CV 中分割任务的基础模型,彻…

富文本编辑器CKEditor4简单使用-05(开发自定义插件入门)

富文本编辑器CKEditor4简单使用-05(开发自定义插件入门) 1. CKEditor4插件入门1.1 关于CKEditor4插件的简单安装与使用1.2 参考 2. 开发自定义插件——当前时间插件2.1 创建插件文件目录结构2.2 编写插件原代码2.2.1 编写代码框架2.2.2 创建编辑器命令2.…

【blender插件】(1)快速开始

特性 blender的python API有如下特性: 编辑用户界面可以编辑的任意数据(场景,网格,粒子等)。修改用户首选项、键映射和主题。运行自己的配置运行工具。创建用户界面元素,如菜单、标题和面板。创建新的工具。场景交互式工具。创建与Blender集成的新渲染引擎。修改模型的数据…

迪文串口屏数据的隐藏功能

一、概述 由于项目中在使用迪文屏显示数据的时候,需要在数据为0的时候不显示0,而迪文屏默认的数据变量在无值的时候显示为0,此时可以使用数据的隐藏功能指令 二、具体实现方法 1、可以使用描述指针地址来实现数据的隐藏,查看应用…

「效果图渲染」效果图与3D影视动画渲染平台

效果图渲染和3D影视动画渲染都是视觉图像渲染的领域应用。效果图渲染主要服务于建筑、室内设计和产品设计等行业,这些领域通常对视觉呈现的精度和细节有较高要求。与之相比,3D影视动画渲染则普遍应用于电影、电视、视频游戏和广告等媒体领域,…

2024年第四届工业自动化、机器人与控制工程国际会议 | Ei、Scopus双检索

会议简介 Brief Introduction 2024年第四届工业自动化、机器人与控制工程国际会议(IARCE 2024) 会议时间:2024年7月5 -7日 召开地点:中国成都 大会官网:www.iarce.org 2024年第四届工业自动化、机器人与控制工程国际会…

零基础学Python之核心基础知识

1.Python入门简介 (1)什么是Python Life is short, you need Python!人生苦短,我用Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性,相比其他语言…

【数据库】创建索引的注意事项

🍎个人博客:个人主页 🏆个人专栏:数据库 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 结语 我的其他博客 前言 在数据库设计和优化中,索引的合理使用是提高查询性能和加速数据检索的关键因素之一。通过选…

Facebook未来展望:社交媒体的下一个篇章

社交媒体一直是连接人与人之间的纽带,而Facebook则一直在推动这一领域的发展。随着科技不断演进和社会需求的不断变迁,Facebook正积极筹谋社交媒体的下一个篇章。本文将深入剖析Facebook的未来展望,探讨其在社交媒体领域所迎接的新时代。 1. …

数字化管理成为了企业数字化转型的重要支撑

随着科技的不断发展,数字化转型已经成为企业发展的重要趋势。数字化转型是指企业利用数字化技术,如云计算、大数据、人工智能等,来提升自身业务水平、提高效率、降低成本,从而实现可持续发展。在这个过程中,数字化管理…