安装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: "验证码错误!!!!!!!!!!!!!!!"

}

}

}

}

结果

文章链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。