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') })
}

你可能感兴趣的:(NestJS学习笔记,NestJs,笔记,学习)