NestJs 中使用 cookie

HTTP cookie 是用户浏览器存储的一小段数据。Cookie 旨在成为网站记住状态信息的可靠机制。当用户再次访问该网站时,cookie 会自动随请求一起发送。

安装插件

首先安装所需的包(以及 TypeScript 用户的类型):

$ npm i cookie-parser
$ npm i -D @types/cookie-parser

安装完成后,将 cookie-parser 中间件应用为全局中间件。

async function bootstrap() {const app = await NestFactory.create(AppModule);app.use(cookieParser());await app.listen(3000);
}
bootstrap();

使用 cookie

在响应体中设置 cookie 可以做如下操作:

  • secret 用于签署 cookie 的字符串或数组。这是可选的,如果未指定,将不会解析签名的 cookie。如果提供了字符串,则将其用作 secret。如果提供了数组,将尝试按顺序取消对每个 secret 的 cookie 的签名。需要设置signed属性。
  • options 作为第二个选项传递给 cookie.parse 的对象。

中间件将解析请求上的 Cookie 标头,并将 cookie 数据公开为属性 req.cookies,如果提供了 secret,则公开为属性 req.signedCookies。这些属性是 cookie 名称到 cookie 值的名称值对。

当提供 secret 时,该模块将取消签名并验证任何签名的 cookie 值,并将这些名称值对从 req.cookies 移动到 req.signedCookies 中。签名 cookie 是一个值以 s: 为前缀的 cookie。签名验证失败的签名 cookie 的值将是 false,而不是被篡改的值。

1、请求体中获取 cookie

// 设置了signed属性后,会对cookie进行加密,加密的秘钥就是cookieParser设置的字符串
@Get('/rescookie')
resCookie(@Res({ passthrough: true }) response: Response) {response.cookie('key', '123333', { httpOnly: true, expires: new Date('2023-09-10'), signed: true })
}// 获取请求体中的cookie
@Get()
findAll(@Req() request: Request) {console.log(request.cookies);// console.log(request.signedCookies); // 获取签名的Cookie
}

2、 响应体中返回 cookie

要将 cookie 附加到传出响应,请使用 Response#cookie() 方法:

@Get('/cookie')
findAll(@Res({ passthrough: true }) response: Response) {response.cookie('key', 'demo')
}

说明: response.cookie 的参数有三个,第一个参数是 cookie 的名称,第二个参数是 cookie 的值,第三参数是 cookie 的相关属性值设置,例如设置 cookie 的有效期等属性,具体实例如下:

@Get('/rescookie')
resCookie(@Res({ passthrough: true }) response: Response) {response.cookie('key', 'demo', { httpOnly: true, expires: new Date('2023-09-10') })
}

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

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

相关文章

AAC之处理码流分析工具(三十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

Qt各个版本下载及安装教程(离线和非离线安装)

Qt各个版本下载链接: Index of /archive/qthttps://download.qt.io/archive/qt/ 离线安装 ,离线安装很无脑,下一步下一步就可以。 我离线下载 半个小时把2G的exe下载下来了

Sql单行数据查询为多行

数据量小可以,数据量大时间太久 select distinct regexp_substr("fixed_option", [^,],1,level) c1 from "MATERIAL"."BasicInfo_Dishes_Summary" A where "fixed_option" is not NULL AND "dish_name"地三鲜…

RNN 单元:分析 GRU 方程与 LSTM,以及何时选择 RNN 而不是变压器

一、说明 深度学习往往感觉像是在雪山上找到自己的道路。拥有坚实的原则会让你对做出决定更有信心。我们都去过那里 在上一篇文章中,我们彻底介绍并检查了 LSTM 单元的各个方面。有人可能会争辩说,RNN方法已经过时了,研究它们是没有意义的。的…

CSS实现白天/夜晚模式切换

目录 功能介绍 示例 原理 代码 优化 总结 功能介绍 在网页设计和用户体验中,模式切换功能是一种常见的需求。模式切换可以为用户提供不同的界面外观和布局方案,以适应其个人偏好或特定环境。在这篇博客中,我们将探索如何使用纯CSS实现一…

Android11编译第二弹:USB连接MTP模式+USB调试+USB信任

一、为什么需要开启USB信任和ADB调试 问题1:原始的AOSP,如果通过USB连接设备以后,会弹窗提示用户选择连接模式:MTP,大容量磁盘,照片等模式; 问题2:USB连接设备以后,需要…

Debezium的三种部署方式

Debezium如何部署 debezium 有下面三种部署方式,其中最常用的就是 kafka connect。 kafka connect 一般情况下,我们通过 kafka connect 来部署 debezium,kafka connect 是一个框架和运行时: source connectors:像 debezium 这样将记录发送到 kafka 的source connectors…

Linux音频了解

ALPHA I.MX6U 开发板支持音频,板上搭载了音频编解码芯片 WM8960,支持播放以及录音功能! 本章将会讨论如下主题内容。 ⚫ Linux 下 ALSA 框架概述; ⚫ alsa-lib 库介绍; ⚫ alsa-lib 库移植; ⚫ alsa-l…

【Linux】分区、格式化、挂载点分别是什么?如何理解文件系统和设备之间的关系?

Linux 服务器上的文件是按文件系统层次结构(一个颠倒的目录树)访问的。该文件系统层次结构则是由系统可用的存储设备所提供的文件系统组装而来。每个文件系统都是一个已格式化的存储设备,可用于存储文件。 从某种意义上说,Linux 文件系统层次结构可在独立…

卡特兰数和算法

在组合数学中,卡特兰数是一系列自然数,出现在各种组合计数问题中,通常涉及递归定义的对象。它们以比利时数学家尤金查尔斯卡特兰(Eugne Charles Catalan)的名字命名。 卡特兰数序列是1, 1, 2, 5, 14, 42......&#xf…

[Java]_[初级]_[使用SAX流的方式写入XML文件]

场景 文件的写入目前没有发现可以增量写入的,只能是完全重新写入。对于大量数据需要写入XML文件,还是和读XML文件一样,不需要生成DOM模型能节省不少的内存和指令。 说明 在java标准库里,也是有相关的SAX类来写入数据流&#xf…

解释 Git 的基本概念和使用方式

Git是一个分布式版本控制系统,它可以记录文件的变化历史,便于团队协作和版本管理。以下是Git的基本概念和使用方式: 仓库(Repository):Git可以管理一个或多个仓库,每个仓库保存了一个或多个文件…

微信小程序精准扶贫数据收集小程序平台设计与实现

摘 要 近些年以来,随着我国的互联网技术的不断进步,计算机科学技术的发展也在不断的快速发展。在当下“互联网”的带动下,我国的各行各业,上到政府机关下到小微企业都通过互联网的发展带动取得了很好的发展势头。我国这两年来通过…

合宙Air724UG LuatOS-Air LVGL API控件--复选框 (Checkbox)

复选框 (Checkbox) 复选框主要是让用户进行一些内容选择,或者同意用户协议。 示例代码 – 复选框回调函数 function event_handler(obj, event) if event lvgl.EVENT_VALUE_CHANGED then print(“State”, lvgl.checkbox_is_checked(obj)) end end – 创建复选框…

STM32 FREERTOS osDelayUntil()异常

问题: 在使用osDelayUntil()进行固定延时时发现不起作用,程序不能按照预期的延时进行执行(比延时要快)。 #define taskMBSysManage_Delay_TIME 1000 TickType_t xLastWakeTime; xLastWakeTime xTaskGe…

githubPage部署Vue项目

github中新建项目 my-web (编写vue项目代码) myWebOnline(存放Vue打包后的dist包里面的文件) 发布流程 (假设my-web项目已经编写完成)Vue-cli my-web vue.config.js文件中 const { defineConfig } require(vue/cli-service)…

OpenCV(八):图像二值化

目录 1.固定值二值化 2.自适应阈值二值化 3.Android JNI完整代码 1.固定值二值化 固定阈值二值化是OpenCV中一种简单而常用的图像处理技术,用于将图像转换为二值图像。在固定阈值二值化中,像素值根据一个预定义的阈值进行分类,大于阈值的…

容器权限降级为 op 用户

容器权限降级为 op 用户 更新 Docker Compose 配置文件: 请确保已提供的 docker-compose.yml 文件已准备好,并覆盖了原先的配置文件。 cd /home/op/compose设置文件和文件夹权限: 在 Linux 环境中,按照以下步骤逐一执行命令。在需…

socket,tcp,http三者之间的原理和区别

目录 1、TCP/IP连接 2、HTTP连接 3、SOCKET原理 4、SOCKET连接与TCP/IP连接 5、Socket连接与HTTP连接 socket,tcp,http三者之间的区别和原理 http、TCP/IP协议与socket之间的区别 下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置…

对比Flink、Storm、Spark Streaming 的反压机制

分析&回答 Flink 反压机制 Flink 如何处理反压? Storm 反压机制 Storm反压机制 Storm 在每一个 Bolt 都会有一个监测反压的线程(Backpressure Thread),这个线程一但检测到 Bolt 里的接收队列(recv queue)出现了…