引言

session 是服务器 为每个用户的浏览器创建的一个会话对象 这个session 会记录到 浏览器的 cookie 用来区分用户

我们使用的是nestjs 默认框架express 他也支持express 的插件 所以我们就可以安装express的session

npm i express-session --save

需要智能提示可以装一个声明依赖

npm i @types/express-session -D

然后在main.ts 引入 通过app.use 注册session

import * as session from 'express-session'app.use(session())

参数配置详解

secret                                         生成服务端session 签名 可以理解为加盐
name      生成客户端cookie 的名字 默认 connect.sid
cookie                                                                                                  设置返回到前端 key 的属性,默认值为{ path: ‘/’, httpOnly: true, secure: false, maxAge: null }。
rolling 在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)

nestjs 配置

import { NestFactory } from '@nestjs/core';
import { VersioningType } from '@nestjs/common';
import { AppModule } from './app.module';
import * as session from 'express-session'
async function bootstrap() {const app = await NestFactory.create(AppModule);app.enableVersioning({type: VersioningType.URI})app.use(session({ secret: "XiaoMan", name: "xm.session", rolling: true, cookie: { maxAge: null } }))await app.listen(3000);
}
bootstrap();

验证码案例

前端 vue3 ts element-plus fetch

安装element

npm install element-plus -S

然后简单的绘制页面

<template><div class="wraps"><el-form :label-position="labelPosition" label-width="100px" :model="formLabelAlign" style="max-width: 460px"><el-form-item label="账号"><el-input v-model="formLabelAlign.name" /></el-form-item><el-form-item label="密码"><el-input type="password" v-model="formLabelAlign.password" /></el-form-item><el-form-item label="验证码"><div style="display:flex"><el-input  v-model="formLabelAlign.code" /><img @click="resetCode" :src="codeUrl" alt=""></div></el-form-item><el-form-item><el-button @click="submit">登录</el-button></el-form-item></el-form></div>
</template><script setup lang='ts'>
import { onMounted, reactive, ref } from 'vue';const codeUrl = ref<string>('/api/user/code')const resetCode = () => codeUrl.value = codeUrl.value + '?' + Math.random()const labelPosition = ref<string>('right')const formLabelAlign = reactive({name: "",password: "",code: ""
})const submit = async () => {await fetch('/api/user/create', {method: "POST",body: JSON.stringify(formLabelAlign),headers: {'content-type': 'application/json'}}).then(res => res.json())
}</script><style>
* {padding: 0;margin: 0;
}.wraps {display: flex;justify-content: center;align-items: center;height: inherit;
}html,
body,
#app {height: 100%;
}
</style>

我们可以看到  session 已经存到了浏览器

跨域我用了本地dev 解决的

    proxy:{'/api':{target:'http://localhost:3000/',changeOrigin:true,rewrite: path => path.replace(/^\/api/, ''),}}

后端nestjs  验证码插件 svgCaptcha

npm install svg-captcha -S
import { Controller, Get, Post, Body, Param, Request, Query, Headers, HttpCode, Res, Req } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import * as svgCaptcha from 'svg-captcha';
@Controller('user')
export class UserController {constructor(private readonly userService: UserService) { }@Get('code')createCaptcha(@Req() req, @Res() res) {const captcha = svgCaptcha.create({size: 4,//生成几个验证码fontSize: 50, //文字大小width: 100,  //宽度height: 34,  //高度background: '#cc9966',  //背景颜色})req.session.code = captcha.text //存储验证码记录到sessionres.type('image/svg+xml')res.send(captcha.data)}@Post('create')createUser(@Req() req, @Body() body) {console.log(req.session.code, body)if (req.session.code.toLocaleLowerCase() === body?.code?.toLocaleLowerCase()) {return {message: "验证码正确"}} else {return {message: "验证码错误"}}}
}

小满nestjs(第九章 nestjs Session)相关推荐

  1. 机器学习-第九章 聚类

    机器学习-第九章 聚类 D系鼎溜已关注 2020.02.19 10:36:17字数 3,312阅读 375 9.1 聚类任务 在无监督学习任务中,包括了密度估计.异常检测以及聚类等.其中应用最广泛的是 ...

  2. 第九章 Django框架——csrf请求伪造和csrf_token使用

    第九章 Django框架--csrf请求伪造和csrf_token使用 一.csrf请求伪造 二.csrf_token使用 三.简单的csrf_token应用 四.Ajax使用csrf_token 一 ...

  3. Python计算机视觉:第九章 图像分割

    第九章 图像分割 9.1 更新用户 9.1.1 编辑表单 9.1.2 编辑失败 9.1.3 编辑成功 9.2 权限限制 9.2.1 必须先登录 9.2.2 用户只能编辑自己的资料 9.2.3 更友好的 ...

  4. MOOC —— Python语言基础与应用 by 北京大学 第九章 高级扩展模块

    第九章 高级扩展模块 49.例外处理 50.推导式 51.生成器函数 generator object 52.上机练习:生成器 53.图像处理库 54.Web服务框架 55.网络爬虫 56.数据可视化 ...

  5. 《Linux 高级路由与流量控制手册(2012)》第九章

    更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io 译者序 本文内容来自 Linux Advanced Routing & Traffic Control HOWT ...

  6. 鸟哥的Linux私房菜(基础篇)- 第九章、文件与文件系统的压缩与打包

    第九章.文件与文件系统的压缩与打包 最近升级日期:2009/08/20 在 Linux 底下有相当多的压缩命令可以运行喔!这些压缩命令可以让我们更方便从网络上面下载大型的文件呢!此外,我们知道在 Li ...

  7. 《Servlet和JSP学习指南》一第2章 Session管理 2.1 网址重写

    第2章 Session管理 Session管理(或Session追踪)是Web应用程序开发中一个非常重要的主题.这是因为Web语言HTTP是无状态的.在默认情况下,Web服务器不知道一个HTTP请求是 ...

  8. 【Vue.js 牛刀小试】:第九章 - 组件基础再探(data、props)

    系列目录地址 一.基础知识概览 第一章 - 一些基础概念(posted at 2018-10-31) 第二章 - 常见的指令的使用(posted at 2018-11-01) 第三章 - 事件修饰符的 ...

  9. 【机器学习实战 第九章】树回归 CART算法的原理与实现 - python3

    本文来自<机器学习实战>(Peter Harrington)第九章"树回归"部分,代码使用python3.5,并在jupyter notebook环境中测试通过,推荐c ...

最新文章

  1. OpenSSH7.0兼容性测试报告
  2. 所选元素非联通_非固化橡胶沥青防水涂料与耐根穿刺防水卷材(沥青基)施工要点...
  3. float:left后,导航栏不左浮解决
  4. ReactRouter的实现
  5. 最暖的10个小故事,看完心都融化了
  6. 【Android】Android实现自定义带文字和图片的Button
  7. mysql 追加水印_php 使用GD库为页面增加水印示例代码
  8. get buffer from CMSampleBufferRef
  9. 计算机一直在启动修复怎么关机,电脑开机总是要启动修复修复后重启还要修复怎么处理方法...
  10. NB-IoT、eMTC与LoRa三大物联网技术相争,共存还是鏖战?
  11. SoundTouch音频处理库
  12. matlab中怎么看电压和电流值,matlab计算电压有效值
  13. Chrome浏览器整个网页截图
  14. 用计算机完成下表的视距测量计算公式,2012测量学计算题库及参考答案
  15. 永别了,内涵段子APP及公众号被永久关停!!!!
  16. mysql 获取某个时间段每一天、每一个小时的统计数据
  17. PID控制器的优缺点和周期
  18. 阿里云——媒体云(视频直播)
  19. note: This error originates from a subprocess, and is likely not a problem with pip.解决 python降版本tips
  20. 6个巧做PPT的实用小技巧,学会了瞬间让你的PPT酷起来!

热门文章

  1. [内网渗透]—NTLM网络认证及NTLM-Relay攻击
  2. 关于区块链自我主权身份(SSI)的三个主要问题
  3. Robotaxi卡位战背后:滴滴的资本焦虑与技术沟壑
  4. 【博客420】arp代理与arp代答
  5. 做一个“盯盘机器人”,实时监控股票价格并通知你!
  6. 不要被别人影响,踏实做自己的事
  7. 基于安卓/android/微信小程序的高校党员掌上党支部APP#计算机毕业设计
  8. video downloadhelper 无时间限制_Python实现超简单【抖音】无水印视频批量下载
  9. 2022-2027年中国三相功率因数表行业市场深度分析及投资战略规划报告
  10. 三相半波可控整流电路matlab仿真,三相桥式可控整流电路的MATLAB仿真