HTTP cookie 是存储在用户浏览器中的一小段数据。Cookies 的设计初衷是作为网站记忆状态信息的可靠机制。当用户再次访问网站时,cookie 会自动随请求发送。
首先安装所需包 (TypeScript 用户还需安装其类型声明):
安装完成后,将 cookie-parser
中间件作为全局中间件应用(例如在 main.ts
文件中)。
你可以向 cookieParser
中间件传递多个选项:
secret
用于签名 cookie 的字符串或数组。这是可选的,如果未指定,则不会解析已签名的 cookie。如果提供字符串,则将其用作密钥。如果提供数组,则会尝试按顺序使用每个密钥来验证 cookie 签名。options
一个对象,作为第二个参数传递给 cookie.parse
。更多信息请参阅 cookie。该中间件会解析请求中的 Cookie
头部,并将 cookie 数据暴露为属性 req.cookies
;如果提供了密钥,还会暴露为属性 req.signedCookies
。这些属性是 cookie 名称与 cookie 值的键值对。
当提供密钥时,该模块会对已签名的 cookie 值进行解密验证,并将这些键值对从 req.cookies
移动到 req.signedCookies
。已签名的 cookie 是指值以 s:
为前缀的 cookie。签名验证失败的 cookie 值将被置为 false
而非被篡改后的值。
完成此设置后,您现在可以在路由处理程序中读取 cookie,如下所示:
info 提示
@Req()
装饰器需从@nestjs/common
导入,而Request
需从express
包导入。
要为输出响应附加 cookie,请使用 Response#cookie()
方法:
warning 警告 如果希望将响应处理逻辑交由框架处理,请记得将
passthrough
选项设为true
,如上所示。更多信息请参阅 此处 。
info 提示
@Res()
装饰器从@nestjs/common
导入,而Response
则来自express
包。
首先安装所需依赖包:
安装完成后,注册 @fastify/cookie
插件:
配置完成后,您现在可以在路由处理程序中读取 cookie,如下所示:
info 注意
@Req()
装饰器是从@nestjs/common
导入的,而FastifyRequest
则来自fastify
包。
要为传出响应附加 cookie,请使用 FastifyReply#setCookie()
方法:
要了解更多关于 FastifyReply#setCookie()
方法的信息,请查看此页面 。
warning 警告 若要将响应处理逻辑交由框架处理,请记得将
passthrough
选项设为true
,如上所示。更多信息请参阅此处 。
info 提示
@Res()
装饰器需从@nestjs/common
导入,而FastifyReply
则来自fastify
包。
为提供便捷的声明式方法来访问传入的 cookies,我们可以创建一个自定义装饰器 。
@Cookies()
装饰器将从 req.cookies
对象中提取所有 cookie 或指定名称的 cookie,并用该值填充被装饰的参数。
通过这种方式,我们现在可以在路由处理程序签名中使用该装饰器,如下所示: