- 创建项目
- Nest 控制器
- nest 配置路由请求数据
- Nest 服务
- Nest 模块
- 配置静态资源
- 配置模板引擎
- Cookie 的使用
- Session 的使用
- 跨域,前缀路径、网站安全、请求限速
- 管道、守卫、拦截器、过滤器、中间件
- 一例看懂中间件、守卫、管道、异常过滤器、拦截器
- 数据验证
- 配置抽离
- 环境配置
- 文件上传与下载
- 实现图片随机验证码
- 邮件服务
- nest 基于 possport + jwt 做登陆验证
- 对数据库的密码加密:md5 和 bcryptjs
- 角色权限
- 定时任务
- 接入 Swagger 接口文档
- nest 连接 Mongodb
- typeORM 操作 Mysql 数据库
- nest 统一处理数据库操作的查询结果
- 数据库实体设计与操作
- typeorm 增删改查操作
- typeorm 使用事务的 3 种方式
- typeorm 一对一关系设计与增删改查
- typeorm 一对多和多对一关系设计与增删改查
- typeorm 多对多关系设计与增删改查
- nest 连接 Redis
- 集成 redis 实现单点登录
- Q:nestJS 注入其他依赖时为什么还需要导入其 module
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
实现图片随机验证码
nest 如何实现图片随机验证码?
这里使用的是svg-captcha这个库,你也可以使用其他的库
yarn add svg-captcha
封装,以便多次调用
src -> utils -> tools.service.ts import { Injectable } from '@nestjs/common'; import * as svgCaptcha from 'svg-captcha'; @Injectable() export class ToolsService { async captche(size = 4) { const captcha = svgCaptcha.create({ //可配置返回的图片信息 size, //生成几个验证码 fontSize: 50, //文字大小 width: 100, //宽度 height: 34, //高度 background: '#cc9966', //背景颜色 }); return captcha; } }
在使用的 module 中引入
import { Module } from '@nestjs/common'; import { UserController } from './user.controller'; import { UserService } from './user.service'; import { ToolsService } from '../../utils/tools.service'; @Module({ controllers: [UserController], providers: [UserService, ToolsService], }) export class UserModule { }
使用
import { Controller, Get, Post,Body } from '@nestjs/common'; import { EmailService } from './email.service'; @Controller('user') export class UserController{ constructor(private readonly toolsService: ToolsService,) {} //注入服务 @Get('authcode') //当请求该接口时,返回一张随机图片验证码 async getCode(@Req() req, @Res() res) { const svgCaptcha = await this.toolsService.captche(); //创建验证码 req.session.code = svgCaptcha.text; //使用 session 保存验证,用于登陆时验证 console.log(req.session.code); res.type('image/svg+xml'); //指定返回的类型 res.send(svgCaptcha.data); //给页面返回一张图片 } @Post('/login') login(@Body() body, @Session() session) { //验证验证码,由前端传递过来 const { code } = body; if(code?.toUpperCase() === session.code?.toUpperCase()){ console.log(‘验证码通过’) } return 'hello authcode'; } }
前端简单代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> form { display: flex; } .input { width: 80px; height: 32px; } .verify_img { margin: 0px 5px; } </style> </head> <body> <h2>随机验证码</h2> <form action="/user/login" method="post" enctype="application/x-www-form-urlencoded"> <input type="text" name='code' class="input" /> <img class="verify_img" src="https://www.wenjiangs.com/user/code" title="看不清?点击刷新" onclick="javascript:this.src='/user/code?t='+Math.random()"> //点击再次生成新的验证码 <button type="submit">提交</button> </form> </body> </html>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论